├── .gitignore ├── README.md ├── codegen-common ├── pom.xml └── src │ ├── main │ └── java │ │ └── cn │ │ └── springcloud │ │ └── codegen │ │ ├── annotation │ │ ├── CodeGenCube.java │ │ └── CodeGenPlugin.java │ │ └── utils │ │ ├── ProjectConfig.java │ │ └── ProjectConfigHelper.java │ └── test │ └── java │ └── cn │ └── springcloud │ └── codegen │ └── AppTest.java ├── codegen-config ├── pom.xml └── src │ ├── main │ └── java │ │ └── cn │ │ └── springcloud │ │ └── codegen │ │ └── App.java │ └── test │ └── java │ └── cn │ └── springcloud │ └── codegen │ └── AppTest.java ├── codegen-docs ├── design │ └── README.md ├── images │ └── README.md └── pom.xml ├── codegen-engine ├── pom.xml └── src │ ├── main │ ├── java │ │ └── cn │ │ │ └── springcloud │ │ │ └── codegen │ │ │ └── engine │ │ │ ├── component │ │ │ └── CodeGenComponent.java │ │ │ ├── config │ │ │ └── FileConfig.java │ │ │ ├── constants │ │ │ └── CodeGenConstants.java │ │ │ ├── entity │ │ │ ├── BaseInputParams.java │ │ │ ├── CodeOutType.java │ │ │ ├── ConfigParams.java │ │ │ ├── DependenciesGav.java │ │ │ ├── InputParams.java │ │ │ └── InputParamsContext.java │ │ │ ├── exception │ │ │ ├── CodeGenException.java │ │ │ └── CodeGenFileException.java │ │ │ ├── generator │ │ │ ├── CodeGenEngineGenerator.java │ │ │ ├── CodeGenExtendGenerator.java │ │ │ ├── CodeGenForDataBaseGenerator.java │ │ │ └── CodeGenForFileGenerator.java │ │ │ ├── service │ │ │ ├── ClassService.java │ │ │ ├── ExtendService.java │ │ │ ├── OutFileService.java │ │ │ └── TemplateConfigService.java │ │ │ ├── thread │ │ │ └── CodeGenPool.java │ │ │ └── tools │ │ │ ├── ClassTools.java │ │ │ ├── CommonTools.java │ │ │ ├── FileTools.java │ │ │ ├── JsonTools.java │ │ │ ├── MapTools.java │ │ │ ├── ObjectCopyValueToVoTools.java │ │ │ ├── ReadXmlFileTools.java │ │ │ └── TransforParamTools.java │ └── resources │ │ └── log4j.properties │ └── test │ ├── java │ └── cn │ │ └── springcloud │ │ └── codegen │ │ └── engine │ │ ├── ConfigForInputParamsCodeGenConfigTest.java │ │ ├── EurekaForInputParamsCodeGenConfigTest.java │ │ ├── EurekaWithFeignTest.java │ │ ├── FeignCodeGenTest.java │ │ └── feign │ │ ├── FeignAssemblyGenerator.java │ │ ├── FeignDataGenerator.java │ │ ├── FeignFileGenerator.java │ │ └── FeignPomDataGenerator.java │ └── resources │ └── templates │ ├── config │ ├── java │ │ └── ConfigApplication.java.ftl │ ├── pom.xml.ftl │ └── resources │ │ └── application.properties.ftl │ ├── eureka │ ├── java │ │ └── EurekaApplication.java.ftl │ ├── pom.xml.ftl │ └── resources │ │ └── application.properties.ftl │ ├── feign │ └── java │ │ └── UserServiceFeignClient.java.ftl │ └── xml_config │ ├── config_component_xml.xml │ ├── eureka_component_xml.xml │ └── feign_component_xml.xml ├── codegen-ui ├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── LICENSE ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── logo.png │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ ├── webpack.prod.conf.js │ ├── webpack.remote.conf.js │ └── webpack.v2.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ ├── prod.env.js │ ├── remote.env.js │ └── version.env.js ├── index.html ├── package-lock.json ├── package.json ├── src │ ├── App.vue │ ├── api │ │ ├── api.js │ │ └── index.js │ ├── assets │ │ ├── bg1.jpg │ │ ├── logo.png │ │ ├── logo4.png │ │ ├── sw-footer-sprite1.png │ │ ├── theme │ │ │ ├── theme-darkblue │ │ │ │ ├── alert.css │ │ │ │ ├── autocomplete.css │ │ │ │ ├── badge.css │ │ │ │ ├── base.css │ │ │ │ ├── breadcrumb-item.css │ │ │ │ ├── breadcrumb.css │ │ │ │ ├── button-group.css │ │ │ │ ├── button.css │ │ │ │ ├── card.css │ │ │ │ ├── carousel-item.css │ │ │ │ ├── carousel.css │ │ │ │ ├── cascader.css │ │ │ │ ├── checkbox-group.css │ │ │ │ ├── checkbox.css │ │ │ │ ├── col.css │ │ │ │ ├── collapse-item.css │ │ │ │ ├── collapse.css │ │ │ │ ├── color-picker.css │ │ │ │ ├── date-picker.css │ │ │ │ ├── dialog.css │ │ │ │ ├── dropdown-item.css │ │ │ │ ├── dropdown-menu.css │ │ │ │ ├── dropdown.css │ │ │ │ ├── fonts │ │ │ │ │ ├── element-icons.ttf │ │ │ │ │ └── element-icons.woff │ │ │ │ ├── form-item.css │ │ │ │ ├── form.css │ │ │ │ ├── icon.css │ │ │ │ ├── index.css │ │ │ │ ├── input-number.css │ │ │ │ ├── input.css │ │ │ │ ├── loading.css │ │ │ │ ├── menu-item-group.css │ │ │ │ ├── menu-item.css │ │ │ │ ├── menu.css │ │ │ │ ├── message-box.css │ │ │ │ ├── message.css │ │ │ │ ├── notification.css │ │ │ │ ├── option-group.css │ │ │ │ ├── option.css │ │ │ │ ├── pagination.css │ │ │ │ ├── popover.css │ │ │ │ ├── progress.css │ │ │ │ ├── radio-button.css │ │ │ │ ├── radio-group.css │ │ │ │ ├── radio.css │ │ │ │ ├── rate.css │ │ │ │ ├── reset.css │ │ │ │ ├── row.css │ │ │ │ ├── scrollbar.css │ │ │ │ ├── select-dropdown.css │ │ │ │ ├── select.css │ │ │ │ ├── slider.css │ │ │ │ ├── spinner.css │ │ │ │ ├── step.css │ │ │ │ ├── steps.css │ │ │ │ ├── submenu.css │ │ │ │ ├── switch.css │ │ │ │ ├── tab-pane.css │ │ │ │ ├── table-column.css │ │ │ │ ├── table.css │ │ │ │ ├── tabs.css │ │ │ │ ├── tag.css │ │ │ │ ├── time-picker.css │ │ │ │ ├── time-select.css │ │ │ │ ├── tooltip.css │ │ │ │ ├── tree.css │ │ │ │ └── upload.css │ │ │ └── theme-green │ │ │ │ ├── alert.css │ │ │ │ ├── autocomplete.css │ │ │ │ ├── badge.css │ │ │ │ ├── base.css │ │ │ │ ├── breadcrumb-item.css │ │ │ │ ├── breadcrumb.css │ │ │ │ ├── button-group.css │ │ │ │ ├── button.css │ │ │ │ ├── card.css │ │ │ │ ├── carousel-item.css │ │ │ │ ├── carousel.css │ │ │ │ ├── cascader.css │ │ │ │ ├── checkbox-group.css │ │ │ │ ├── checkbox.css │ │ │ │ ├── col.css │ │ │ │ ├── collapse-item.css │ │ │ │ ├── collapse.css │ │ │ │ ├── color-picker.css │ │ │ │ ├── date-picker.css │ │ │ │ ├── dialog.css │ │ │ │ ├── dropdown-item.css │ │ │ │ ├── dropdown-menu.css │ │ │ │ ├── dropdown.css │ │ │ │ ├── fonts │ │ │ │ ├── element-icons.ttf │ │ │ │ └── element-icons.woff │ │ │ │ ├── form-item.css │ │ │ │ ├── form.css │ │ │ │ ├── icon.css │ │ │ │ ├── index.css │ │ │ │ ├── input-number.css │ │ │ │ ├── input.css │ │ │ │ ├── loading.css │ │ │ │ ├── menu-item-group.css │ │ │ │ ├── menu-item.css │ │ │ │ ├── menu.css │ │ │ │ ├── message-box.css │ │ │ │ ├── message.css │ │ │ │ ├── notification.css │ │ │ │ ├── option-group.css │ │ │ │ ├── option.css │ │ │ │ ├── pagination.css │ │ │ │ ├── popover.css │ │ │ │ ├── progress.css │ │ │ │ ├── radio-button.css │ │ │ │ ├── radio-group.css │ │ │ │ ├── radio.css │ │ │ │ ├── rate.css │ │ │ │ ├── reset.css │ │ │ │ ├── row.css │ │ │ │ ├── scrollbar.css │ │ │ │ ├── select-dropdown.css │ │ │ │ ├── select.css │ │ │ │ ├── slider.css │ │ │ │ ├── spinner.css │ │ │ │ ├── step.css │ │ │ │ ├── steps.css │ │ │ │ ├── submenu.css │ │ │ │ ├── switch.css │ │ │ │ ├── tab-pane.css │ │ │ │ ├── table-column.css │ │ │ │ ├── table.css │ │ │ │ ├── tabs.css │ │ │ │ ├── tag.css │ │ │ │ ├── time-picker.css │ │ │ │ ├── time-select.css │ │ │ │ ├── tooltip.css │ │ │ │ ├── tree.css │ │ │ │ └── upload.css │ │ └── user.png │ ├── common │ │ └── js │ │ │ └── util.js │ ├── components │ │ └── .gitkeep │ ├── main.js │ ├── mock │ │ ├── data │ │ │ └── user.js │ │ ├── index.js │ │ └── mock.js │ ├── routes.js │ ├── styles │ │ └── vars.scss │ ├── views │ │ ├── 404.vue │ │ ├── Home.vue │ │ ├── Login.vue │ │ ├── Main.vue │ │ ├── charts │ │ │ └── echarts.vue │ │ ├── footer.vue │ │ ├── nav1 │ │ │ ├── Form.vue │ │ │ ├── FormTest.vue │ │ │ └── user.vue │ │ ├── nav2 │ │ │ └── Page5.vue │ │ └── nav3 │ │ │ └── Page6.vue │ └── vuex │ │ ├── actions.js │ │ ├── getters.js │ │ └── store.js └── static │ ├── .gitkeep │ ├── css │ ├── animate.min.css │ ├── bootstrap.min.css │ ├── default.css │ ├── font-awesome.min.css │ └── style.min.css │ └── js │ ├── bootstrap.min.js │ ├── jquery.js │ └── jquery.min.js ├── codegen-web ├── pom.xml └── src │ └── main │ ├── java │ └── cn │ │ └── springcloud │ │ └── codegen │ │ ├── SmartCodeGenApplication.java │ │ └── config │ │ └── EnableSwaggerConfig.java │ └── resources │ ├── application.properties │ └── logback.xml └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | # Output Directory 2 | bin/ 3 | target/ 4 | tmp/ 5 | 6 | # C pre-compile 7 | *.gch 8 | *.pch 9 | 10 | # C compile 11 | *.a 12 | *.o 13 | *.ko 14 | *.la 15 | *.lo 16 | *.obj 17 | *.elf 18 | *.so 19 | *.so.* 20 | *.dylib 21 | *.exe 22 | *.lib 23 | *.dll 24 | *.out 25 | *.app 26 | *.hex 27 | 28 | # Debug files 29 | *.dSYM/ 30 | 31 | # Java 32 | *.class 33 | 34 | # Java Package Files 35 | *.jar 36 | *.war 37 | *.ear 38 | 39 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 40 | hs_err_pid* 41 | 42 | # Zip Files 43 | *.rar 44 | *.zip 45 | *.7z 46 | *.tar 47 | *.gz 48 | 49 | # Ant 50 | #build/ 51 | 52 | # Compiled Python 53 | __pycache__/ 54 | *.py[cod] 55 | *py.class 56 | 57 | # Eclipse 58 | .settings/ 59 | .classpath 60 | .project 61 | 62 | 63 | # IntelliJ, based on http://devnet.jetbrains.net/docs/DOC-1186 64 | .idea/ 65 | *.iml 66 | 67 | # logs and trace 68 | *.log 69 | *.trace 70 | *.dat 71 | 72 | # vi swap 73 | *.swp 74 | 75 | # Backup Files 76 | *.bak 77 | *.old 78 | 79 | # SVN metadata 80 | .svn/ 81 | 82 | 83 | -------------------------------------------------------------------------------- /codegen-common/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | codegen 5 | cn.springcloud.codegen 6 | 1.0.0 7 | 8 | 4.0.0 9 | 10 | codegen-common 11 | jar 12 | 13 | codegen-common 14 | http://maven.apache.org 15 | 16 | 17 | UTF-8 18 | 19 | 20 | 21 | 22 | junit 23 | junit 24 | 3.8.1 25 | test 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /codegen-common/src/main/java/cn/springcloud/codegen/annotation/CodeGenCube.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.annotation; 2 | 3 | /** 4 | * 代码生成器CodeGenCube注解,代码生成器由一个个Cube(立方体组成) 5 | * @author xujin 6 | */ 7 | public @interface CodeGenCube { 8 | } 9 | -------------------------------------------------------------------------------- /codegen-common/src/main/java/cn/springcloud/codegen/annotation/CodeGenPlugin.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.annotation; 2 | 3 | /** 4 | * 代码生成器插件 5 | * @author xujin 6 | */ 7 | public @interface CodeGenPlugin { 8 | } 9 | -------------------------------------------------------------------------------- /codegen-common/src/main/java/cn/springcloud/codegen/utils/ProjectConfig.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.utils; 2 | 3 | import java.io.*; 4 | 5 | 6 | /** 7 | * @author xujin 8 | */ 9 | public class ProjectConfig implements Serializable { 10 | 11 | 12 | /** 13 | * 使用序列化方式深度克隆项目配置模型 14 | * @return 15 | * @throws IOException 16 | * @throws ClassNotFoundException 17 | */ 18 | public ProjectConfig deepClone() throws IOException, ClassNotFoundException { 19 | ProjectConfig dc = null; 20 | ByteArrayOutputStream baos = new ByteArrayOutputStream(); 21 | ObjectOutputStream oos = new ObjectOutputStream(baos); 22 | oos.writeObject(this); 23 | oos.close(); 24 | 25 | ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 26 | ObjectInputStream bis = new ObjectInputStream(bais); 27 | dc = (ProjectConfig)bis.readObject(); 28 | return dc; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /codegen-common/src/main/java/cn/springcloud/codegen/utils/ProjectConfigHelper.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.utils; 2 | 3 | /** 4 | * @author xujin 5 | */ 6 | public class ProjectConfigHelper { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /codegen-common/src/test/java/cn/springcloud/codegen/AppTest.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen; 2 | 3 | import junit.framework.Test; 4 | import junit.framework.TestCase; 5 | import junit.framework.TestSuite; 6 | 7 | /** 8 | * Unit test for simple App. 9 | */ 10 | public class AppTest 11 | extends TestCase 12 | { 13 | /** 14 | * Create the test case 15 | * 16 | * @param testName name of the test case 17 | */ 18 | public AppTest( String testName ) 19 | { 20 | super( testName ); 21 | } 22 | 23 | /** 24 | * @return the suite of tests being tested 25 | */ 26 | public static Test suite() 27 | { 28 | return new TestSuite( AppTest.class ); 29 | } 30 | 31 | /** 32 | * Rigourous Test :-) 33 | */ 34 | public void testApp() 35 | { 36 | assertTrue( true ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /codegen-config/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | codegen 5 | cn.springcloud.codegen 6 | 1.0.0 7 | 8 | 4.0.0 9 | 10 | codegen-config 11 | jar 12 | 13 | codegen-config 14 | http://maven.apache.org 15 | 16 | 17 | UTF-8 18 | 19 | 20 | 21 | 22 | junit 23 | junit 24 | 3.8.1 25 | test 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /codegen-config/src/main/java/cn/springcloud/codegen/App.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen; 2 | 3 | /** 4 | * Hello world! 5 | * 6 | */ 7 | public class App 8 | { 9 | public static void main( String[] args ) 10 | { 11 | System.out.println( "Hello World!" ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /codegen-config/src/test/java/cn/springcloud/codegen/AppTest.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen; 2 | 3 | import junit.framework.Test; 4 | import junit.framework.TestCase; 5 | import junit.framework.TestSuite; 6 | 7 | /** 8 | * Unit test for simple App. 9 | */ 10 | public class AppTest 11 | extends TestCase 12 | { 13 | /** 14 | * Create the test case 15 | * 16 | * @param testName name of the test case 17 | */ 18 | public AppTest( String testName ) 19 | { 20 | super( testName ); 21 | } 22 | 23 | /** 24 | * @return the suite of tests being tested 25 | */ 26 | public static Test suite() 27 | { 28 | return new TestSuite( AppTest.class ); 29 | } 30 | 31 | /** 32 | * Rigourous Test :-) 33 | */ 34 | public void testApp() 35 | { 36 | assertTrue( true ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /codegen-docs/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | codegen 5 | cn.springcloud.codegen 6 | 1.0.0 7 | 8 | 4.0.0 9 | 10 | codegen-docs 11 | 12 | Maven 13 | http://maven.apache.org/ 14 | 2001 15 | 16 | 17 | 18 | website 19 | scp://webhost.company.com/www/website 20 | 21 | 22 | 23 | 24 | UTF-8 25 | 26 | 27 | 28 | 29 | 30 | maven-site-plugin 31 | 32 | en,fr 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /codegen-engine/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | codegen 7 | cn.springcloud.codegen 8 | 1.0.0 9 | .. 10 | 11 | 4.0.0 12 | codegen-engine 13 | 14 | 15 | 16 | org.freemarker 17 | freemarker 18 | 19 | 20 | 21 | dom4j 22 | dom4j 23 | 24 | 25 | 26 | com.alibaba 27 | fastjson 28 | 29 | 30 | 31 | org.apache.commons 32 | commons-lang3 33 | 34 | 35 | commons-beanutils 36 | commons-beanutils 37 | 38 | 39 | 40 | org.slf4j 41 | slf4j-log4j12 42 | 43 | 44 | 45 | 46 | 47 | 48 | org.apache.maven.plugins 49 | maven-compiler-plugin 50 | 51 | 1.6 52 | 1.6 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/component/CodeGenComponent.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.component; 2 | 3 | import cn.springcloud.codegen.engine.constants.CodeGenConstants; 4 | import cn.springcloud.codegen.engine.entity.CodeOutType; 5 | import cn.springcloud.codegen.engine.entity.InputParams; 6 | import cn.springcloud.codegen.engine.entity.InputParamsContext; 7 | import cn.springcloud.codegen.engine.generator.CodeGenExtendGenerator; 8 | import cn.springcloud.codegen.engine.generator.CodeGenForFileGenerator; 9 | import cn.springcloud.codegen.engine.tools.FileTools; 10 | 11 | import java.util.List; 12 | import java.util.Map; 13 | 14 | /** 15 | * Created with IntelliJ IDEA. 16 | * 17 | * @author: zzf 18 | * @date: 2018/1/30 19 | * @time: 16:48 20 | * @description : 组件的统一创建对象 21 | */ 22 | public final class CodeGenComponent extends CodeGenForFileGenerator { 23 | 24 | private Map otherData; 25 | 26 | public CodeGenComponent(InputParamsContext context, Map templateData, Map otherData) { 27 | super(context, templateData, otherData); 28 | this.otherData = otherData; 29 | } 30 | 31 | public CodeGenComponent(InputParams inputParams, Map templateData, Map otherData) { 32 | super(inputParams, templateData, otherData); 33 | this.otherData = otherData; 34 | transforParam(inputParams); 35 | } 36 | 37 | public CodeGenComponent(InputParams inputParams, Map templateData, List extendGenerators, Map otherData) { 38 | super(inputParams, templateData, extendGenerators); 39 | this.otherData = otherData; 40 | transforParam(inputParams); 41 | } 42 | 43 | /** 44 | * 如果在templateData 中的参数为空的时候才会使用这个重写的参数 45 | * @return 46 | */ 47 | @Override 48 | public Map getTemplateData() { 49 | return null; 50 | } 51 | 52 | @Override 53 | public CodeOutType isJavaOrResourcesOrOtherCode() { 54 | CodeOutType codeOutType = CodeOutType.getType(FileTools.getTypeValue(String.valueOf(otherData.get("isJavaOrResourcesOrOtherCode")))); 55 | return codeOutType != null ? codeOutType : CodeOutType.NONE; 56 | } 57 | 58 | /** 59 | * 转化参数信息 60 | * @param inputParams 61 | * @return 62 | */ 63 | private void transforParam(InputParams inputParams){ 64 | 65 | Object constValue = CodeGenConstants.getConstValue(FileTools.getTypeValue(inputParams.getTemplateConfigEncode())); 66 | inputParams.setTemplateConfigEncode(constValue == null ? "" : constValue.toString()); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/config/FileConfig.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.config; 2 | 3 | import cn.springcloud.codegen.engine.exception.CodeGenException; 4 | import cn.springcloud.codegen.engine.exception.CodeGenFileException; 5 | 6 | import java.io.*; 7 | import java.net.URL; 8 | import java.util.Properties; 9 | 10 | /** 11 | * Created with IntelliJ IDEA. 12 | * 13 | * @author: zzf 14 | * @date: 2018/1/18 15 | * @time: 16:04 16 | * @description : 配置文件的解析, 多种文件解析都写在这里 17 | * 例如: properties , xml, json 等文件格式的解析要支持 18 | */ 19 | public class FileConfig { 20 | 21 | /** 22 | * 加载properties 资源文件 23 | * @param in 输入流 24 | * @return 25 | */ 26 | public static Properties getProperties(InputStream in) { 27 | Properties properties = new Properties(); 28 | try { 29 | properties.load(in); 30 | } catch (IOException e) { 31 | throw new CodeGenException("couldn't load properties file '" + in +"'", e); 32 | } 33 | return properties; 34 | } 35 | 36 | /** 37 | * 配置文件路径 38 | * @param configPath 39 | * @return 40 | */ 41 | public static Properties getProperties(String configPath){ 42 | 43 | try { 44 | File file = new File(configPath); 45 | InputStream in = new FileInputStream(file); 46 | return getProperties(in); 47 | } catch (FileNotFoundException e) { 48 | throw new CodeGenException("couldn't find config file in " + configPath + " " + e); 49 | } 50 | } 51 | 52 | /** 53 | *@paramurl 54 | *@return 55 | *@throwsIOException 56 | */ 57 | public static InputStream getStream(URL url) throws IOException{ 58 | if(url!=null){ 59 | return url.openStream(); 60 | }else{ 61 | return null; 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/constants/CodeGenConstants.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.constants; 2 | 3 | 4 | /** 5 | * Created with IntelliJ IDEA. 6 | * 7 | * @author: zzf 8 | * @date: 2018/1/17 9 | * @time: 15:57 10 | * @description : 全局常量 11 | */ 12 | public class CodeGenConstants { 13 | 14 | /** 15 | * 默认编码的格式 16 | */ 17 | public static final String DEFAULT_ENCODE = "UTF-8"; 18 | 19 | /** 20 | * 默认的模板名称 21 | */ 22 | public static final String DEFAULT_TEMPLATE_POSTFIX = "ftl"; 23 | 24 | /** 25 | * 文件分隔符 26 | */ 27 | public static final String POINT_STR = "."; 28 | 29 | /** 30 | * 文件切个类型 31 | */ 32 | public static final String FILE_SEPARATOR = "/"; 33 | 34 | public static final String CLASS_ANNOTATION_KEY = "classAnnotationKey"; 35 | 36 | public static final String CLASS_IMPORT_KEY = "classImportKey"; 37 | 38 | public static final String POM_DEPENDENCY_KEY = "pomDependencyKey"; 39 | 40 | /** 41 | * 生成目录下的片接 42 | */ 43 | public static final String MAIN_JAVA_PATH = "src" + FILE_SEPARATOR + "main" + FILE_SEPARATOR + "java" + FILE_SEPARATOR; 44 | public static final String MAIN_RESOURCE_PATH = "src" + FILE_SEPARATOR + "main" + FILE_SEPARATOR + "resources" + FILE_SEPARATOR; 45 | public static final String TEST_JAVA_PATH = "src" + FILE_SEPARATOR + "test" + FILE_SEPARATOR + "java" + FILE_SEPARATOR; 46 | public static final String TEST_RESOURCES_PATH = "src" + FILE_SEPARATOR + "test" + FILE_SEPARATOR + "resources" + FILE_SEPARATOR; 47 | 48 | /** 49 | * 获取静态的常量属性 50 | * @param field 51 | * @return 52 | */ 53 | public static Object getConstValue(String field){ 54 | try { 55 | // null 表示的是static的 56 | return CodeGenConstants.class.getField(field).get(null); 57 | } catch (Exception e) { 58 | 59 | } 60 | return null; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/entity/BaseInputParams.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.entity; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created with IntelliJ IDEA. 7 | * 8 | * @author: zzf 9 | * @date: 2018/1/18 10 | * @time: 15:38 11 | * @description : 输入参数的基础类型(这里的输出参数不是指模板文件的参数) 12 | */ 13 | public class BaseInputParams implements Serializable{ 14 | 15 | private static final long serialVersionUID = 2822361127561108856L; 16 | private String templateName; 17 | private String fileName; 18 | private String fileType; 19 | private String dynamicOutPath; 20 | private String moduleName; 21 | private String packageName; 22 | 23 | public BaseInputParams(String templateName, String fileName, String fileType, String dynamicOutPath, String moduleName, String packageName) { 24 | this.templateName = templateName; 25 | this.fileName = fileName; 26 | this.fileType = fileType; 27 | this.dynamicOutPath = dynamicOutPath; 28 | this.moduleName = moduleName; 29 | this.packageName = packageName; 30 | } 31 | 32 | public BaseInputParams() {} 33 | 34 | public String getTemplateName() { 35 | return templateName; 36 | } 37 | 38 | public void setTemplateName(String templateName) { 39 | this.templateName = templateName; 40 | } 41 | 42 | public String getFileName() { 43 | return fileName; 44 | } 45 | 46 | public void setFileName(String fileName) { 47 | this.fileName = fileName; 48 | } 49 | 50 | public String getFileType() { 51 | return fileType; 52 | } 53 | 54 | public void setFileType(String fileType) { 55 | this.fileType = fileType; 56 | } 57 | 58 | public String getDynamicOutPath() { 59 | return dynamicOutPath; 60 | } 61 | 62 | public void setDynamicOutPath(String dynamicOutPath) { 63 | this.dynamicOutPath = dynamicOutPath; 64 | } 65 | 66 | public String getModuleName() { 67 | return moduleName; 68 | } 69 | 70 | public void setModuleName(String moduleName) { 71 | this.moduleName = moduleName; 72 | } 73 | 74 | public String getPackageName() { 75 | return packageName; 76 | } 77 | 78 | public void setPackageName(String packageName) { 79 | this.packageName = packageName; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/entity/CodeOutType.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.entity; 2 | 3 | import cn.springcloud.codegen.engine.constants.CodeGenConstants; 4 | 5 | /** 6 | * Created with IntelliJ IDEA. 7 | * 8 | * @author: zzf 9 | * @date: 2018/1/21 10 | * @time: 18:11 11 | * @description : 12 | * 代码的类型 : 13 | * 1. java : src/main/java 14 | * 2. resources : src/main/resources 15 | * 3. none : 不添加任何目录 16 | * 4. test_java : src/test/java 17 | * 5. test_resources : src/test/resources 18 | */ 19 | public enum CodeOutType { 20 | 21 | JAVA(CodeGenConstants.MAIN_JAVA_PATH, "java文件夹下的目录"), 22 | RESOURCES(CodeGenConstants.MAIN_RESOURCE_PATH, "resources文件夹下的目录"), 23 | NONE("", "其他文件类型的生成, 不考虑添加额外的目录"), 24 | TEST_JAVA(CodeGenConstants.TEST_JAVA_PATH, "test文件夹下的 java 目录"), 25 | TEST_RESOURCES(CodeGenConstants.TEST_RESOURCES_PATH, "test文件夹下的 resources目录"); 26 | 27 | private final String key; 28 | private final String value; 29 | 30 | private CodeOutType(String key, String value) { 31 | this.value = value; 32 | this.key = key; 33 | } 34 | 35 | public String getKey() { 36 | return key; 37 | } 38 | 39 | public String getValue() { 40 | return value; 41 | } 42 | 43 | /** 44 | * 通过value 反查 key 45 | * @param value 46 | * @return 47 | */ 48 | public static String getLabelByValue(String value){ 49 | CodeOutType[] types = CodeOutType.values(); 50 | for (int i = 0; i < types.length; i++) { 51 | if(types[i].value.equals(value)){ 52 | return types[i].getKey(); 53 | } 54 | } 55 | return ""; 56 | } 57 | 58 | /** 59 | * 获取枚举的属性 60 | * @param type 61 | * @return 62 | */ 63 | public static CodeOutType getType(String type){ 64 | CodeOutType[] types = CodeOutType.values(); 65 | for (int i = 0; i < types.length; i++) { 66 | if(types[i].toString().equals(type)){ 67 | return types[i]; 68 | } 69 | } 70 | System.out.println("CodeOutType中,未找到对应的枚举属性"); 71 | return null; 72 | } 73 | 74 | } 75 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/entity/ConfigParams.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.entity; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created with IntelliJ IDEA. 7 | * 8 | * @author: zzf 9 | * @date: 2018/1/24 10 | * @time: 15:20 11 | * @description : 配置文件的参数参数转化, 全部转字符串, 可以通过fastJson 转化在转化成对应的构造bean即可 12 | */ 13 | public class ConfigParams implements Serializable { 14 | 15 | private static final long serialVersionUID = 6380397981444700402L; 16 | 17 | /** 18 | * 初始化需要的参数 19 | */ 20 | private String initData; 21 | 22 | /** 23 | * 模板需要的参数 24 | */ 25 | private String templateData; 26 | 27 | /** 28 | * 其他的补充参数 29 | */ 30 | private String otherData; 31 | 32 | public String getInitData() { 33 | return initData; 34 | } 35 | 36 | public void setInitData(String initData) { 37 | this.initData = initData; 38 | } 39 | 40 | public String getTemplateData() { 41 | return templateData; 42 | } 43 | 44 | public void setTemplateData(String templateData) { 45 | this.templateData = templateData; 46 | } 47 | 48 | public String getOtherData() { 49 | return otherData; 50 | } 51 | 52 | public void setOtherData(String otherData) { 53 | this.otherData = otherData; 54 | } 55 | 56 | @Override 57 | public String toString() { 58 | return "ConfigParams{" + 59 | "initData='" + initData + '\'' + 60 | ", templateData='" + templateData + '\'' + 61 | ", otherData='" + otherData + '\'' + 62 | '}'; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/entity/DependenciesGav.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.entity; 2 | 3 | /** 4 | * @author Vincent. 5 | * @createdOn 2018/01/27 17:50 6 | */ 7 | public class DependenciesGav { 8 | 9 | private String groupId; 10 | 11 | private String artifactId; 12 | 13 | private String version; 14 | 15 | public String getGroupId() { 16 | return groupId; 17 | } 18 | 19 | public void setGroupId(String groupId) { 20 | this.groupId = groupId; 21 | } 22 | 23 | public String getArtifactId() { 24 | return artifactId; 25 | } 26 | 27 | public void setArtifactId(String artifactId) { 28 | this.artifactId = artifactId; 29 | } 30 | 31 | public String getVersion() { 32 | return version; 33 | } 34 | 35 | public void setVersion(String version) { 36 | this.version = version; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/entity/InputParams.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.entity; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created with IntelliJ IDEA. 7 | * 8 | * @author: zzf 9 | * @date: 2018/1/17 10 | * @time: 19:27 11 | * @description : 子类的输出参数, 模板和输出路径等自定义在任何地方 12 | */ 13 | public class InputParams extends BaseInputParams implements Serializable{ 14 | 15 | private static final long serialVersionUID = -1377887339408890399L; 16 | private String templateConfigEncode; 17 | private String templateDir; 18 | 19 | 20 | public InputParams(String templateConfigEncode, String dynamicOutPath, 21 | String templateDir, String packageName,String templateName, 22 | String fileName, String fileType, String moduleName) { 23 | 24 | // 父类的构造方法 25 | super(templateName, fileName, fileType, dynamicOutPath, moduleName, packageName); 26 | this.templateConfigEncode = templateConfigEncode; 27 | this.templateDir = templateDir; 28 | } 29 | 30 | public InputParams(){} 31 | 32 | public String getTemplateConfigEncode() { 33 | return templateConfigEncode; 34 | } 35 | 36 | public void setTemplateConfigEncode(String templateConfigEncode) { 37 | this.templateConfigEncode = templateConfigEncode; 38 | } 39 | 40 | public String getTemplateDir() { 41 | return templateDir; 42 | } 43 | 44 | public void setTemplateDir(String templateDir) { 45 | this.templateDir = templateDir; 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/entity/InputParamsContext.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.entity; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created with IntelliJ IDEA. 7 | * 8 | * @author: zzf 9 | * @date: 2018/1/18 10 | * @time: 11:54 11 | * @description : 主要是使用于模板文件和操作类所在的路径一致的情况下使用 12 | */ 13 | public class InputParamsContext extends BaseInputParams implements Serializable{ 14 | 15 | private static final long serialVersionUID = 8790588232535807382L; 16 | private String prefixTemplatePath; 17 | private String reducedTemplatePath; 18 | private Class currentClasses; 19 | 20 | public InputParamsContext(String templateName,String fileName, String fileType, String dynamicOutPath, String moduleName, 21 | String prefixTemplatePath, String reducedTemplatePath, Class currentClasses, String packageName) { 22 | super(templateName, fileName, fileType, dynamicOutPath, moduleName, packageName); 23 | this.prefixTemplatePath = prefixTemplatePath; 24 | this.reducedTemplatePath = reducedTemplatePath; 25 | this.currentClasses = currentClasses; 26 | } 27 | 28 | /** 29 | * 这个需要set 方法设置 dynamicOutPath, moduleName,fileType 参数 30 | * templateName, fileName, templateDir 使用当前类的共同属性 31 | * 32 | * @param prefixTemplatePath 模板的前缀 33 | * @param reducedTemplatePath 缩减路径 34 | * @param currentClasses 当前类的class 35 | */ 36 | public InputParamsContext(String prefixTemplatePath, String reducedTemplatePath, Class currentClasses) { 37 | this.prefixTemplatePath = prefixTemplatePath; 38 | this.reducedTemplatePath = reducedTemplatePath; 39 | this.currentClasses = currentClasses; 40 | } 41 | 42 | /** 43 | * 默认的缩减路径为类所在的路径 44 | * 生成的的名字默认为类名 45 | * 模板名称默认为类名称+ftl 46 | * 47 | * @param prefixTemplatePath 48 | * @param currentClasses 49 | */ 50 | public InputParamsContext(String prefixTemplatePath, Class currentClasses) { 51 | this.prefixTemplatePath = prefixTemplatePath; 52 | this.currentClasses = currentClasses; 53 | } 54 | 55 | public InputParamsContext() {} 56 | 57 | public String getPrefixTemplatePath() { 58 | return prefixTemplatePath; 59 | } 60 | 61 | public void setPrefixTemplatePath(String prefixTemplatePath) { 62 | this.prefixTemplatePath = prefixTemplatePath; 63 | } 64 | 65 | public String getReducedTemplatePath() { 66 | return reducedTemplatePath; 67 | } 68 | 69 | public void setReducedTemplatePath(String reducedTemplatePath) { 70 | this.reducedTemplatePath = reducedTemplatePath; 71 | } 72 | 73 | public Class getCurrentClasses() { 74 | return currentClasses; 75 | } 76 | 77 | public void setCurrentClasses(Class currentClasses) { 78 | this.currentClasses = currentClasses; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/exception/CodeGenException.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.exception; 2 | 3 | /** 4 | * Created with IntelliJ IDEA. 5 | * 6 | * @author: zzf 7 | * @date: 2018/1/17 8 | * @time: 15:50 9 | * @description : 生成异常类 10 | */ 11 | public class CodeGenException extends RuntimeException { 12 | 13 | private static final long serialVersionUID = 1776723636365101508L; 14 | private String code; 15 | private String msg; 16 | 17 | public CodeGenException(String message){ 18 | super(message); 19 | } 20 | 21 | public CodeGenException(String message, Throwable cause){ 22 | super(message, cause); 23 | } 24 | 25 | public CodeGenException(String code, String msg) { 26 | super(msg); 27 | this.code = code; 28 | this.msg = msg; 29 | } 30 | 31 | public String getCode() { 32 | return code; 33 | } 34 | 35 | public String getMsg() { 36 | return msg; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/exception/CodeGenFileException.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.exception; 2 | 3 | import javax.annotation.processing.FilerException; 4 | 5 | /** 6 | * Created with IntelliJ IDEA. 7 | * 8 | * @author: zzf 9 | * @date: 2018/1/17 10 | * @time: 16:17 11 | * @description : 模板文件和生成文件异常 12 | */ 13 | public class CodeGenFileException extends Exception { 14 | 15 | private static final long serialVersionUID = 206605161158992130L; 16 | 17 | public CodeGenFileException(String message){ 18 | super(message); 19 | } 20 | 21 | public CodeGenFileException(String message, Throwable cause){ 22 | super(message, cause); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/generator/CodeGenExtendGenerator.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.generator; 2 | 3 | import cn.springcloud.codegen.engine.service.ExtendService; 4 | 5 | import java.util.Map; 6 | 7 | /** 8 | * @author Vincent. 9 | * @createdOn 2018/01/27 15:52 10 | */ 11 | public abstract class CodeGenExtendGenerator implements ExtendService { 12 | 13 | @Override 14 | public abstract Map getExtendData(); 15 | 16 | /** 17 | * 扩展数据作用文件标识,可用作将改数据作用到指定文件上 18 | * @return 19 | */ 20 | public abstract String targetIdentifier(); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/generator/CodeGenForDataBaseGenerator.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.generator; 2 | 3 | /** 4 | * Created with IntelliJ IDEA. 5 | * 6 | * @author: zzf 7 | * @date: 2018/1/17 8 | * @time: 18:27 9 | * @description : 数据库的代码生成器 10 | */ 11 | public class CodeGenForDataBaseGenerator { 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/service/ClassService.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.service; 2 | 3 | /** 4 | * Created with IntelliJ IDEA. 5 | * 6 | * @author: zzf 7 | * @date: 2018/1/18 8 | * @time: 11:08 9 | * @description : 类的服务, 主要是完成类的 10 | */ 11 | public interface ClassService { 12 | 13 | String getModuleName(); 14 | 15 | String getPackageName(); 16 | } 17 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/service/ExtendService.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.service; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * @author Vincent. 7 | * @createdOn 2018/01/27 15:24 8 | */ 9 | public interface ExtendService { 10 | 11 | Map getExtendData(); 12 | } 13 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/service/OutFileService.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.service; 2 | 3 | import java.io.File; 4 | 5 | /** 6 | * Created with IntelliJ IDEA. 7 | * 8 | * @author: zzf 9 | * @date: 2018/1/17 10 | * @time: 16:08 11 | * @description : 输出文件接口 12 | */ 13 | public interface OutFileService { 14 | 15 | String getDynamicOutPath(); 16 | 17 | String getFileName(); 18 | 19 | String getFileType(); 20 | } 21 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/service/TemplateConfigService.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.service; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * Created with IntelliJ IDEA. 7 | * 8 | * @author: zzf 9 | * @date: 2018/1/17 10 | * @time: 15:58 11 | * @description : 模板配置的接口 12 | */ 13 | public interface TemplateConfigService { 14 | 15 | String getTemplateDir(); 16 | 17 | String getTemplateName(); 18 | 19 | Map getData(); 20 | } 21 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/thread/CodeGenPool.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.thread; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.concurrent.*; 7 | 8 | /** 9 | * Created with IntelliJ IDEA. 10 | * 11 | * @author: zzf 12 | * @date: 2018/1/18 13 | * @time: 13:27 14 | * @description : 代码生成器的线程池 15 | */ 16 | public class CodeGenPool { 17 | 18 | private final Logger logger = LoggerFactory.getLogger(CodeGenPool.class); 19 | 20 | /** 21 | * 线程池的大小默认为, CPU核数 * 2 22 | */ 23 | public static int DEFAULT_POOL_SIZE = Runtime.getRuntime().availableProcessors() * 2; 24 | private static CodeGenPool instance = null; 25 | private ExecutorService executors = null; 26 | 27 | private CodeGenPool(){ 28 | this.executors = Executors.newFixedThreadPool(DEFAULT_POOL_SIZE); 29 | } 30 | 31 | public static CodeGenPool getInstance(){ 32 | if(instance == null){ 33 | synchronized (CodeGenPool.class){ 34 | if(instance == null){ 35 | instance = new CodeGenPool(); 36 | } 37 | } 38 | } 39 | 40 | return instance; 41 | } 42 | 43 | /** 44 | * 执行生成任务 45 | * @param callable 46 | * @param 47 | * @return 48 | */ 49 | public Future submit(Callable callable){ 50 | return this.executors.submit(callable); 51 | } 52 | 53 | /** 54 | * 获取线程池大小 55 | * @return 线程池大小 56 | */ 57 | public static int size() { 58 | return DEFAULT_POOL_SIZE; 59 | } 60 | 61 | /** 62 | * 销毁线程池 63 | */ 64 | public static void destroy() { 65 | if (instance != null) { 66 | instance.executors.shutdown(); 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/tools/ClassTools.java: -------------------------------------------------------------------------------- 1 | 2 | package cn.springcloud.codegen.engine.tools; 3 | 4 | import org.apache.commons.logging.Log; 5 | import org.apache.commons.logging.LogFactory; 6 | 7 | import java.net.URL; 8 | 9 | /** 10 | * Created with IntelliJ IDEA. 11 | * 12 | * @author: zzf 13 | * @date: 2018/1/18 14 | * @time: 19:50 15 | * @description : 公共方法存放类 16 | */ 17 | public class ClassTools { 18 | 19 | private static Log log= LogFactory.getLog(ClassTools.class); 20 | 21 | /** 22 | * 加载Java类。 使用全限定类名 23 | *@paramclassName 24 | *@return 25 | */ 26 | public static Class loadClass(String className) { 27 | try { 28 | return getClassLoader().loadClass(className); 29 | } catch (ClassNotFoundException e) { 30 | throw new RuntimeException("class not found '"+className+"'", e); 31 | } 32 | } 33 | /** 34 | *得到类加载器 35 | *@return 36 | */ 37 | public static ClassLoader getClassLoader() { 38 | return ClassTools.class.getClassLoader(); 39 | } 40 | 41 | /** 42 | * 得到本Class所在的ClassLoader的Classpat的绝对路径。 43 | * URL形式的 44 | * @return 45 | */ 46 | public static String getAbsolutePathOfClassLoaderClassPath(){ 47 | ClassTools.log.info(ClassTools.getClassLoader().getResource("").toString()); 48 | return ClassTools.getClassLoader().getResource("").toString(); 49 | 50 | } 51 | 52 | /** 53 | * 得到绝对路径的 : 例如 D://test/template/ 54 | * @param clazz 55 | * @return 56 | */ 57 | public static String getAbsolutePathOfClassLoaderClassPath(Class clazz){ 58 | URL resource = clazz.getClassLoader().getResource(""); 59 | return resource.getPath(); 60 | } 61 | 62 | /** 63 | * 获取纯类名称:例如 Application.java 得到 Application 64 | * @param clazz 65 | * @return 66 | */ 67 | public static String getClassSimpleName(Class clazz){ 68 | return clazz.getSimpleName(); 69 | } 70 | 71 | /** 72 | * 得到包名称 : 例如 cn.springcloud.engine 73 | * @param clazz 74 | * @return 75 | */ 76 | public static String getClassPackageName(Class clazz){ 77 | return clazz.getPackage().getName(); 78 | } 79 | 80 | /** 81 | * 得到类的全路径,是 包.类名称 cn.springcloud.Application 82 | * @param clazz 83 | * @return 84 | */ 85 | public static String getClassFullPath(Class clazz){ 86 | return clazz.getName(); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/tools/CommonTools.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.tools; 2 | 3 | /** 4 | * Created with IntelliJ IDEA. 5 | * 6 | * @author: zzf 7 | * @date: 2018/1/18 8 | * @time: 11:26 9 | * @description : 公共方法存放类 10 | */ 11 | public class CommonTools { 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/tools/FileTools.java: -------------------------------------------------------------------------------- 1 | 2 | package cn.springcloud.codegen.engine.tools; 3 | 4 | import cn.springcloud.codegen.engine.constants.CodeGenConstants; 5 | import org.apache.commons.lang3.StringUtils; 6 | 7 | import java.io.File; 8 | 9 | /** 10 | * Created with IntelliJ IDEA. 11 | * 12 | * @author: zzf 13 | * @date: 2018/1/17 14 | * @time: 20:20 15 | * @description : 文件工具类 16 | */ 17 | public class FileTools { 18 | 19 | /** 20 | * 输出目录 21 | * @param dynamicOutPath 22 | * @param moduleName 23 | * @param classPackageName 24 | * @return 25 | */ 26 | public static String getOutPath(String dynamicOutPath,String moduleName, String codeOutTypePath,String classPackageName){ 27 | 28 | if(StringUtils.isNotBlank(classPackageName)){ 29 | classPackageName = convertPackageToPath(classPackageName); 30 | }else{ 31 | classPackageName = ""; 32 | } 33 | 34 | StringBuilder sb = new StringBuilder(); 35 | sb.append(dynamicOutPath).append(File.separator); 36 | sb.append(moduleName).append(File.separator); 37 | sb.append(codeOutTypePath).append(File.separator); 38 | sb.append(classPackageName).append(File.separator); 39 | 40 | return sb.toString().replace("\\", CodeGenConstants.FILE_SEPARATOR); 41 | } 42 | 43 | /** 44 | * 最终要出书的文件名 45 | * @param fileName 46 | * @param fileType 47 | * @return 48 | */ 49 | public static String getFinalFileName(String fileName, String fileType){ 50 | 51 | // 不传递文件类型的时候, 使用模板截取调后面的进行使用 52 | return StringUtils.isNotBlank(fileType) ? fileName + "." + fileType : fileName; 53 | } 54 | 55 | /** 56 | * 将包名转换成路径名称(也就是将. 转化成/) 57 | * @param packageName 58 | * @return 59 | */ 60 | public static String convertPackageToPath(String packageName){ 61 | if(StringUtils.isNotBlank(packageName)){ 62 | return packageName.replaceAll("\\.", CodeGenConstants.FILE_SEPARATOR); 63 | } 64 | return packageName; 65 | } 66 | 67 | /** 68 | * 将路径转化成包结构 69 | * @param path 70 | * @return 71 | */ 72 | public static String convertPathToPackage(String path){ 73 | if(StringUtils.isNotBlank(path)){ 74 | return path.replaceAll("//", "."); 75 | } 76 | return path; 77 | } 78 | 79 | /** 80 | * 获取当前系统的临时目录 81 | * @return 82 | */ 83 | public static String getSysTemp(){ 84 | return System.getProperty("java.io.tmpdir"); 85 | } 86 | 87 | 88 | /** 89 | * 获取输出文件的名称 90 | * @param templateName 91 | * @return 92 | */ 93 | public static String getOutFileName(String templateName){ 94 | return templateName.substring(0, templateName.lastIndexOf(".")); 95 | } 96 | 97 | /** 98 | * 截取到想要的部分字符串信息 99 | * @param finalStr 100 | * @return 101 | */ 102 | public static String getTypeValue(String finalStr){ 103 | return StringUtils.isNotBlank(finalStr) ? finalStr.substring(finalStr.lastIndexOf(".") + 1, finalStr.length()) : ""; 104 | } 105 | 106 | } 107 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/tools/JsonTools.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.tools; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.alibaba.fastjson.JSONArray; 5 | import com.alibaba.fastjson.JSONObject; 6 | 7 | import java.io.*; 8 | import java.util.Map; 9 | 10 | /** 11 | * Created with IntelliJ IDEA. 12 | * 13 | * @author: zzf 14 | * @date: 2018/1/23 15 | * @time: 22:25 16 | * @description : json 工具类,解析json 文件和将对象转化成json 对象 17 | */ 18 | public class JsonTools { 19 | 20 | /** 21 | * 将对象转化成json 数据 22 | * @param obj 23 | * @return 24 | */ 25 | public static Object objectToJson(Object obj){ 26 | return JSON.toJSON(obj); 27 | } 28 | 29 | /** 30 | * 将json 字符串信息转化成对象信息, 通过泛型的形式转化 31 | * @param jsonStr 32 | * @param clazz 33 | * @param 34 | * @return 35 | */ 36 | public static T parseObjectByGenericity(String jsonStr, Class clazz){ 37 | T t = JSON.parseObject(jsonStr, clazz); 38 | return t; 39 | } 40 | 41 | /** 42 | * 将map 转化成json数组 43 | * @param o 44 | * @return 45 | */ 46 | public static JSONArray parseObjectToJsonArray(Object o){ 47 | 48 | Object obj = objectToJson(o); 49 | if(obj instanceof JSONObject){ 50 | System.out.println("json对象"); 51 | JSONArray jsonArray = new JSONArray(); 52 | jsonArray.add(obj); 53 | return jsonArray; 54 | } 55 | return (JSONArray) JsonTools.objectToJson(obj); 56 | } 57 | 58 | /** 59 | * json 文件的位置 60 | * @param path 61 | * @return 62 | */ 63 | public static Object readJsonFile(String path){ 64 | return readJsonFile(new File(path)); 65 | } 66 | 67 | /** 68 | * 读取json 配置文件 69 | * @param file 70 | * @return 71 | */ 72 | public static Object readJsonFile(File file){ 73 | 74 | StringBuilder sb = new StringBuilder(); 75 | InputStream in = null; 76 | try { 77 | in = new FileInputStream(file); 78 | BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); 79 | String tempString = ""; 80 | while((tempString = reader.readLine()) != null){ 81 | sb.append(tempString); 82 | } 83 | reader.close(); 84 | } catch (IOException e) { 85 | e.printStackTrace(); 86 | } finally { 87 | if(in != null){ 88 | try { 89 | in.close(); 90 | } catch (IOException e) { 91 | e.printStackTrace(); 92 | } 93 | } 94 | } 95 | 96 | return JSON.parse(sb.toString()); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/tools/MapTools.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.tools; 2 | 3 | import java.util.*; 4 | 5 | /** 6 | * @author Vincent. 7 | * @createdOn 2018/01/27 21:33 8 | */ 9 | public class MapTools { 10 | 11 | public static Map addMap(Map originMap, Map addendMap) { 12 | if (originMap == null){ 13 | originMap = new HashMap(); 14 | } 15 | if (addendMap == null){ 16 | return originMap; 17 | } 18 | for (Map.Entry entry : addendMap.entrySet()) { 19 | if (originMap.get(entry.getKey()) == null) { 20 | if (entry.getValue() instanceof List) { 21 | originMap.put(entry.getKey(), entry.getValue()); 22 | } else { 23 | List list = new ArrayList(); 24 | list.add(entry.getValue()); 25 | originMap.put(entry.getKey(), (V)list); 26 | } 27 | } else if (originMap.get(entry.getKey()) instanceof List) { 28 | if (entry.getValue() instanceof List) { 29 | ((List) originMap.get(entry.getKey())).addAll((Collection) entry.getValue()); 30 | } else { 31 | ((List) originMap.get(entry.getKey())).add(entry.getValue()); 32 | } 33 | } else { 34 | if (entry.getValue() instanceof List) { 35 | ((List) entry.getValue()).add(originMap.get(entry.getKey())); 36 | originMap.put(entry.getKey(), entry.getValue()); 37 | } else { 38 | List list = new ArrayList(); 39 | list.add(originMap.get(entry.getKey())); 40 | list.add(entry.getValue()); 41 | originMap.put(entry.getKey(), (V)list); 42 | } 43 | } 44 | } 45 | return originMap; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/tools/ObjectCopyValueToVoTools.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.tools; 2 | 3 | import cn.springcloud.codegen.engine.exception.CodeGenException; 4 | import org.apache.commons.beanutils.BeanUtilsBean; 5 | import org.apache.commons.beanutils.BeanUtilsBean2; 6 | 7 | import java.lang.reflect.InvocationTargetException; 8 | import java.util.Properties; 9 | 10 | /** 11 | * Created with IntelliJ IDEA. 12 | * 13 | * @author: zzf 14 | * @date: 2018/1/18 15 | * @time: 17:48 16 | * @description : 将properties 属性的值, 映射到实体上(vo, entity) 17 | */ 18 | public class ObjectCopyValueToVoTools { 19 | 20 | /** 21 | * 第一个参数是要复制值的 22 | * 第二个参数是之前存在值的 23 | * @param targetClass 24 | * @param properties 25 | * @param 26 | * @return 27 | * @throws InvocationTargetException 28 | * @throws IllegalAccessException 29 | */ 30 | public static T properties2Object(final T targetClass, final Properties properties) { 31 | BeanUtilsBean instance = BeanUtilsBean2.getInstance(); 32 | try { 33 | instance.copyProperties(targetClass, properties); 34 | } catch (IllegalAccessException e) { 35 | throw new CodeGenException("targetClass = [" + targetClass + "]" + 36 | " or " + "originClass = [" + properties + "] is null."); 37 | } catch (InvocationTargetException e) { 38 | throw new CodeGenException("targetClass = [" + targetClass + "]" + "is not invocation."); 39 | } 40 | return targetClass; 41 | } 42 | 43 | /** 44 | * 将对象的值, 复制到目标对象上 45 | * @param targetClass 46 | * @param originClass 47 | * @param 48 | * @return 49 | * @throws InvocationTargetException 50 | * @throws IllegalAccessException 51 | */ 52 | public static T bean2Object(final T targetClass, final Object originClass) { 53 | 54 | BeanUtilsBean instance = BeanUtilsBean2.getInstance(); 55 | try { 56 | instance.copyProperties(targetClass, originClass); 57 | } catch (IllegalAccessException e) { 58 | throw new CodeGenException("targetClass = [" + targetClass + "]" + 59 | " or " + "originClass = [" + originClass + "] is null."); 60 | } catch (InvocationTargetException e) { 61 | throw new CodeGenException("targetClass = [" + targetClass + "]" + "is not invocation."); 62 | } 63 | return targetClass; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /codegen-engine/src/main/java/cn/springcloud/codegen/engine/tools/TransforParamTools.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.tools; 2 | 3 | import cn.springcloud.codegen.engine.constants.CodeGenConstants; 4 | import cn.springcloud.codegen.engine.entity.InputParams; 5 | import cn.springcloud.codegen.engine.entity.InputParamsContext; 6 | import com.alibaba.fastjson.JSONArray; 7 | import org.apache.commons.lang3.StringUtils; 8 | 9 | import java.io.File; 10 | 11 | /** 12 | * Created with IntelliJ IDEA. 13 | * 14 | * @author: zzf 15 | * @date: 2018/1/19 16 | * @time: 16:49 17 | * @description : 将参数转化成, 代码生成器格式的, 没有设置packageName 默认就是模板Map参数里面的 18 | */ 19 | public class TransforParamTools { 20 | 21 | /** 22 | * 输入的是xml 文件所在位置 23 | * @param xmlPath 24 | * @return 25 | */ 26 | public static JSONArray transforXmlToJsonArray(String xmlPath){ 27 | 28 | Object o = ReadXmlFileTools.readXmlFile(xmlPath); 29 | return JsonTools.parseObjectToJsonArray(o); 30 | } 31 | 32 | /** 33 | * 转化成输入的参数模式 34 | * @param ipc 35 | * @return 36 | */ 37 | public static InputParams transforParam(InputParamsContext ipc){ 38 | 39 | InputParams in = new InputParams(); 40 | Class currentClasses = ipc.getCurrentClasses(); 41 | String simpleName = ClassTools.getClassSimpleName(currentClasses); 42 | 43 | // 等到当前类所在路径 44 | String classPath = ClassTools.getAbsolutePathOfClassLoaderClassPath(currentClasses); 45 | 46 | // 三个必要参数 47 | in.setModuleName(ipc.getModuleName()); 48 | in.setFileType(ipc.getFileType()); 49 | in.setDynamicOutPath(ipc.getDynamicOutPath()); 50 | in.setTemplateDir(classPath + File.separator + ipc.getPrefixTemplatePath()); 51 | /** 52 | * 判断是否传递进来模板名称,如果没有默认为: 类名 + 模板后缀 (Application.java.ftl) 53 | * 这种情况需要类名和模板名称必须要一致 54 | */ 55 | in.setTemplateName(setDynamicTemplateName(ipc, simpleName)); 56 | in.setFileName(getFileName(ipc, simpleName)); 57 | 58 | return in; 59 | } 60 | 61 | /** 62 | * 判断是否传递进来模板名称,如果没有默认为: 类名 + 模板后缀 (Application.java.ftl) 63 | * 这种情况需要类名和模板名称必须要一致 64 | * 动态设置模板名 65 | * @return 66 | */ 67 | private static String setDynamicTemplateName(InputParamsContext ipc, String simpleName){ 68 | return StringUtils.isNotBlank(ipc.getTemplateName()) ? ipc.getTemplateName() : simpleName + CodeGenConstants.POINT_STR + ipc.getFileType() + CodeGenConstants.POINT_STR + CodeGenConstants.DEFAULT_TEMPLATE_POSTFIX; 69 | } 70 | 71 | /** 72 | * 获取输出文件名 73 | * @param ipc 74 | * @return 75 | */ 76 | private static String getFileName(InputParamsContext ipc, String simpleName){ 77 | return StringUtils.isNotBlank(ipc.getFileType()) ? simpleName : FileTools.getOutFileName(ipc.getTemplateName()); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /codegen-engine/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=debug, stdout, R 2 | 3 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 4 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 | 6 | # Pattern to output the caller's file name and line number. 7 | log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 8 | 9 | log4j.appender.R=org.apache.log4j.RollingFileAppender 10 | log4j.appender.R.File=codegen.log 11 | 12 | log4j.appender.R.MaxFileSize=100KB 13 | # Keep one backup file 14 | log4j.appender.R.MaxBackupIndex=1 15 | 16 | log4j.appender.R.layout=org.apache.log4j.PatternLayout 17 | log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n -------------------------------------------------------------------------------- /codegen-engine/src/test/java/cn/springcloud/codegen/engine/ConfigForInputParamsCodeGenConfigTest.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine; 2 | 3 | import cn.springcloud.codegen.engine.component.CodeGenComponent; 4 | import cn.springcloud.codegen.engine.entity.ConfigParams; 5 | import cn.springcloud.codegen.engine.entity.InputParams; 6 | import cn.springcloud.codegen.engine.tools.ClassTools; 7 | import cn.springcloud.codegen.engine.tools.JsonTools; 8 | import cn.springcloud.codegen.engine.tools.TransforParamTools; 9 | import com.alibaba.fastjson.JSONArray; 10 | import freemarker.template.TemplateException; 11 | 12 | import java.io.File; 13 | import java.io.IOException; 14 | import java.util.Map; 15 | 16 | /** 17 | * Created with IntelliJ IDEA. 18 | * 19 | * @author: zzf 20 | * @date: 2018/1/24 21 | * @time: 14:04 22 | * @description : do some thing 23 | */ 24 | public class ConfigForInputParamsCodeGenConfigTest { 25 | 26 | public static void main(String[] args) { 27 | 28 | String fileDir = ConfigForInputParamsCodeGenConfigTest.class.getResource("/").getPath() + "templates/xml_config/config_component_xml.xml"; 29 | JSONArray jsonArray = TransforParamTools.transforXmlToJsonArray(fileDir); 30 | for (int i = 0; i < jsonArray.size(); i++){ 31 | ConfigParams configParams = JsonTools.parseObjectByGenericity(jsonArray.getString(i), ConfigParams.class); 32 | // 输出对象 33 | InputParams inputParams = JsonTools.parseObjectByGenericity(configParams.getInitData(), InputParams.class); 34 | // 模板参数 35 | Map templateData = JsonTools.parseObjectByGenericity(configParams.getTemplateData(), Map.class); 36 | Map otherData = JsonTools.parseObjectByGenericity(configParams.getOtherData(), Map.class); 37 | 38 | try { 39 | 40 | String classPath = ClassTools.getAbsolutePathOfClassLoaderClassPath(ConfigForInputParamsCodeGenConfigTest.class); 41 | inputParams.setTemplateDir(classPath + File.separator + inputParams.getTemplateDir()); 42 | new CodeGenComponent(inputParams, templateData, otherData).genrator(); 43 | } catch (IOException e) { 44 | e.printStackTrace(); 45 | } catch (TemplateException e) { 46 | e.printStackTrace(); 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /codegen-engine/src/test/java/cn/springcloud/codegen/engine/EurekaForInputParamsCodeGenConfigTest.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine; 2 | 3 | import cn.springcloud.codegen.engine.component.CodeGenComponent; 4 | import cn.springcloud.codegen.engine.entity.ConfigParams; 5 | import cn.springcloud.codegen.engine.entity.InputParams; 6 | import cn.springcloud.codegen.engine.tools.*; 7 | import com.alibaba.fastjson.JSONArray; 8 | import freemarker.template.TemplateException; 9 | 10 | import java.io.File; 11 | import java.io.IOException; 12 | import java.util.Map; 13 | 14 | /** 15 | * Created with IntelliJ IDEA. 16 | * 17 | * @author: zzf 18 | * @date: 2018/1/24 19 | * @time: 14:04 20 | * @description : do some thing 21 | */ 22 | public class EurekaForInputParamsCodeGenConfigTest { 23 | 24 | public static void main(String[] args) { 25 | 26 | String fileDir = EurekaForInputParamsCodeGenConfigTest.class.getResource("/").getPath() + "templates/xml_config/eureka_component_xml.xml"; 27 | JSONArray jsonArray = TransforParamTools.transforXmlToJsonArray(fileDir); 28 | for (int i = 0; i < jsonArray.size(); i++){ 29 | ConfigParams configParams = JsonTools.parseObjectByGenericity(jsonArray.getString(i), ConfigParams.class); 30 | // 输出对象 31 | InputParams inputParams = JsonTools.parseObjectByGenericity(configParams.getInitData(), InputParams.class); 32 | // 模板参数 33 | Map templateData = JsonTools.parseObjectByGenericity(configParams.getTemplateData(), Map.class); 34 | Map otherData = JsonTools.parseObjectByGenericity(configParams.getOtherData(), Map.class); 35 | 36 | try { 37 | 38 | String classPath = ClassTools.getAbsolutePathOfClassLoaderClassPath(EurekaForInputParamsCodeGenConfigTest.class); 39 | inputParams.setTemplateDir(classPath + File.separator + inputParams.getTemplateDir()); 40 | new CodeGenComponent(inputParams, templateData, otherData).genrator(); 41 | } catch (IOException e) { 42 | e.printStackTrace(); 43 | } catch (TemplateException e) { 44 | e.printStackTrace(); 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /codegen-engine/src/test/java/cn/springcloud/codegen/engine/FeignCodeGenTest.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine; 2 | 3 | import cn.springcloud.codegen.engine.feign.FeignAssemblyGenerator; 4 | 5 | /** 6 | * @author Vincent. 7 | * @createdOn 2018/01/27 20:57 8 | */ 9 | public class FeignCodeGenTest { 10 | 11 | public static void main(String[] args) { 12 | new FeignAssemblyGenerator().execute(null); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /codegen-engine/src/test/java/cn/springcloud/codegen/engine/feign/FeignDataGenerator.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.feign; 2 | 3 | import cn.springcloud.codegen.engine.constants.CodeGenConstants; 4 | import cn.springcloud.codegen.engine.entity.DependenciesGav; 5 | import cn.springcloud.codegen.engine.generator.CodeGenExtendGenerator; 6 | import cn.springcloud.codegen.engine.service.ExtendService; 7 | 8 | import java.util.ArrayList; 9 | import java.util.HashMap; 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | /** 14 | * @author Vincent. 15 | * @createdOn 2018/01/27 16:00 16 | */ 17 | public class FeignDataGenerator extends CodeGenExtendGenerator { 18 | 19 | @Override 20 | public Map getExtendData() { 21 | Map extendData = new HashMap(); 22 | 23 | List annotation = new ArrayList(); 24 | annotation.add("@EnableFeignClients(basePackages = {\"cn.springcloud.codegen.component.feign\"})"); 25 | extendData.put(CodeGenConstants.CLASS_ANNOTATION_KEY, annotation); 26 | 27 | List importData = new ArrayList(); 28 | importData.add("org.springframework.cloud.netflix.feign.EnableFeignClients;"); 29 | extendData.put(CodeGenConstants.CLASS_IMPORT_KEY, importData); 30 | return extendData; 31 | } 32 | 33 | @Override 34 | public String targetIdentifier() { 35 | return "mainClass"; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /codegen-engine/src/test/java/cn/springcloud/codegen/engine/feign/FeignFileGenerator.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.feign; 2 | 3 | import cn.springcloud.codegen.engine.constants.CodeGenConstants; 4 | import cn.springcloud.codegen.engine.entity.CodeOutType; 5 | import cn.springcloud.codegen.engine.entity.InputParams; 6 | import cn.springcloud.codegen.engine.generator.CodeGenForFileGenerator; 7 | import cn.springcloud.codegen.engine.service.ExtendService; 8 | 9 | import java.util.HashMap; 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | /** 14 | * @author Vincent. 15 | * @createdOn 2018/01/27 18:55 16 | */ 17 | public class FeignFileGenerator extends CodeGenForFileGenerator { 18 | 19 | // 其他的数据 20 | Map otherData = null; 21 | 22 | public FeignFileGenerator(InputParams inputParams, Map templateData, Map otherData) { 23 | super(inputParams, templateData); 24 | this.otherData = otherData; 25 | } 26 | 27 | public FeignFileGenerator(InputParams inputParams, Map templateData, Map otherData, List extendServices) { 28 | super(inputParams, templateData); 29 | // super.setExtendServices(extendServices); 30 | this.otherData = otherData; 31 | } 32 | 33 | /** 34 | * 模板里面需要的参数, 其他的不要在这里添加, 使用templateData 的参数构造方法, 该方法无效 35 | * @return 36 | */ 37 | @Override 38 | public Map getTemplateData() { 39 | Map template = new HashMap(); 40 | template.put(CodeGenConstants.CLASS_ANNOTATION_KEY,"//test"); 41 | return template; 42 | } 43 | 44 | @Override 45 | public CodeOutType isJavaOrResourcesOrOtherCode() { 46 | return otherData.get("isJavaOrResourcesOrOtherCode") != null ? (CodeOutType) otherData.get("isJavaOrResourcesOrOtherCode") : CodeOutType.NONE; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /codegen-engine/src/test/java/cn/springcloud/codegen/engine/feign/FeignPomDataGenerator.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.engine.feign; 2 | 3 | import cn.springcloud.codegen.engine.constants.CodeGenConstants; 4 | import cn.springcloud.codegen.engine.entity.DependenciesGav; 5 | import cn.springcloud.codegen.engine.generator.CodeGenExtendGenerator; 6 | import cn.springcloud.codegen.engine.service.ExtendService; 7 | 8 | import java.util.HashMap; 9 | import java.util.Map; 10 | 11 | /** 12 | * @author Vincent. 13 | * @createdOn 2018/01/27 21:14 14 | */ 15 | public class FeignPomDataGenerator extends CodeGenExtendGenerator { 16 | 17 | @Override 18 | public Map getExtendData() { 19 | Map extendData = new HashMap(); 20 | DependenciesGav gavDependencies = new DependenciesGav(); 21 | gavDependencies.setArtifactId("spring-cloud-starter-feign"); 22 | gavDependencies.setGroupId("org.springframework.cloud"); 23 | extendData.put(CodeGenConstants.POM_DEPENDENCY_KEY, gavDependencies); 24 | return extendData; 25 | } 26 | 27 | @Override 28 | public String targetIdentifier() { 29 | return "pom"; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /codegen-engine/src/test/resources/templates/config/java/ConfigApplication.java.ftl: -------------------------------------------------------------------------------- 1 | package ${packageName}; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.config.server.EnableConfigServer; 6 | 7 | @EnableConfigServer 8 | @SpringBootApplication 9 | public class ConfigApplication { 10 | public static void main(String[] args) { 11 | new SpringApplicationBuilder(ConfigApplication.class).web(true).run(args); 12 | } 13 | } -------------------------------------------------------------------------------- /codegen-engine/src/test/resources/templates/config/pom.xml.ftl: -------------------------------------------------------------------------------- 1 | 2 | 4 | ${pomArtifactId} 5 | ${pomName} 6 | jar 7 | 4.0.0 8 | 9 | org.springframework.boot 10 | spring-boot-starter-parent 11 | ${springBootVersion}.RELEASE 12 | 13 | 14 | 15 | Dalston.SR4 16 | ${javaVersion} 17 | UTF-8 18 | 19 | 20 | 21 | 22 | 23 | org.springframework.cloud 24 | spring-cloud-dependencies 25 | ${r"$"}{spring.cloud.version} 26 | pom 27 | import 28 | 29 | 30 | 31 | 32 | 33 | 34 | org.springframework.cloud 35 | spring-cloud-config-server 36 | 37 | 38 | 39 | 40 | 41 | ${r"$"}{project.artifactId}-${r"$"}{project.version} 42 | 43 | 44 | org.apache.maven.plugins 45 | maven-compiler-plugin 46 | 47 | 48 | -parameters 49 | 50 | ${r"$"}{project.build.sourceEncoding} 51 | ${r"$"}{java.version} 52 | ${r"$"}{java.version} 53 | 54 | 55 | 56 | 57 | org.springframework.boot 58 | spring-boot-maven-plugin 59 | 60 | 61 | 62 | 63 | src/main/java 64 | 65 | **/*.xml 66 | **/*.properties 67 | 68 | 69 | 70 | src/main/resources 71 | 72 | **/*.xml 73 | **/*.properties 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /codegen-engine/src/test/resources/templates/config/resources/application.properties.ftl: -------------------------------------------------------------------------------- 1 | spring.application.name=${serviceName} 2 | server.port=8762 3 | 4 | # 换成实际开发地址即可 5 | spring.cloud.config.server.git.uri=https://gitee.com/zhongzunfa/spring-cloud-config.git 6 | 7 | # 下面三个参数根据实际情况配置 8 | # spring.cloud.config.server.git.username= 9 | # spring.cloud.config.server.git.password= 10 | # spring.cloud.config.server.git.search-paths= 11 | -------------------------------------------------------------------------------- /codegen-engine/src/test/resources/templates/eureka/java/EurekaApplication.java.ftl: -------------------------------------------------------------------------------- 1 | package ${packageName}; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | <#if classImportKey?exists> 7 | <#list classImportKey as model> 8 | import ${model} 9 | 10 | 11 | 12 | @SpringBootApplication 13 | @EnableEurekaServer 14 | <#if classAnnotationKey?exists> 15 | <#list classAnnotationKey as model> 16 | ${model} 17 | 18 | 19 | public class EurekaApplication { 20 | public static void main(String[] args) { 21 | new SpringApplicationBuilder(EurekaApplication.class).web(true).run(args); 22 | } 23 | } -------------------------------------------------------------------------------- /codegen-engine/src/test/resources/templates/eureka/resources/application.properties.ftl: -------------------------------------------------------------------------------- 1 | spring.application.name=${serviceName} 2 | server.port=8761 3 | 4 | eureka.client.register-with-eureka=false 5 | ## 由于注册中心的职责就是维护服务的实例, 它并不需要去检查服务, 所以也设置为false 6 | eureka.client.fetch-registry=false 7 | eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ -------------------------------------------------------------------------------- /codegen-engine/src/test/resources/templates/feign/java/UserServiceFeignClient.java.ftl: -------------------------------------------------------------------------------- 1 | package ${packageName}; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | import org.springframework.web.bind.annotation.PathVariable; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RequestMethod; 7 | 8 | @FeignClient(name = "user-service") 9 | public interface UserServiceFeignClient { 10 | 11 | @RequestMapping(method = RequestMethod.GET, value = "/api/v2/users/{userId}", headers = {"Content-Type=application/json"}) 12 | String getUserName(@PathVariable("userId") final String userId) throws Exception; 13 | 14 | } -------------------------------------------------------------------------------- /codegen-engine/src/test/resources/templates/xml_config/config_component_xml.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | D:\\spring-cloud-codegene-test 6 | java 7 | ConfigApplication 8 | ConfigApplication.java.ftl 9 | templates/config/java/ 10 | config-server 11 | cn.springcloud.codegen.component.config 12 | CodeGenConstants.DEFAULT_ENCODE 13 | 14 | 15 | cn.springcloud.codegen.component.config 16 | 17 | 18 | CodeOutType.JAVA 19 | 20 | 21 | 22 | 23 | D:\\spring-cloud-codegene-test 24 | properties 25 | application 26 | application.properties.ftl 27 | templates/config/resources/ 28 | config-server 29 | 30 | CodeGenConstants.DEFAULT_ENCODE 31 | 32 | 33 | config-server 34 | 35 | 36 | CodeOutType.RESOURCES 37 | 38 | 39 | 40 | 41 | D:\\spring-cloud-codegene-test 42 | xml 43 | pom 44 | pom.xml.ftl 45 | templates/config/ 46 | config-server 47 | 48 | CodeGenConstants.DEFAULT_ENCODE 49 | 50 | 51 | config-server 52 | config-server 53 | config-server 54 | 1.5.9 55 | 1.8 56 | 57 | 58 | CodeOutType.NONE 59 | 60 | 61 | -------------------------------------------------------------------------------- /codegen-engine/src/test/resources/templates/xml_config/eureka_component_xml.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | D:\\spring-cloud-codegene-test 6 | java 7 | EurekaApplication 8 | EurekaApplication.java.ftl 9 | templates/eureka/java/ 10 | eureka-server 11 | cn.springcloud.codegen.component.eureka 12 | CodeGenConstants.DEFAULT_ENCODE 13 | 14 | 15 | cn.springcloud.codegen.component.eureka 16 | 17 | 18 | CodeOutType.JAVA 19 | 20 | 21 | 22 | 23 | D:\\spring-cloud-codegene-test 24 | properties 25 | application 26 | application.properties.ftl 27 | templates/eureka/resources/ 28 | eureka-server 29 | 30 | CodeGenConstants.DEFAULT_ENCODE 31 | 32 | 33 | eureka-server 34 | 35 | 36 | CodeOutType.RESOURCES 37 | 38 | 39 | 40 | 41 | D:\\spring-cloud-codegene-test 42 | xml 43 | pom 44 | pom.xml.ftl 45 | templates/eureka/ 46 | eureka-server 47 | 48 | CodeGenConstants.DEFAULT_ENCODE 49 | 50 | 51 | eureka-server 52 | eureka-server 53 | eureka-server 54 | 1.5.9 55 | 1.8 56 | 57 | 58 | CodeOutType.NONE 59 | 60 | 61 | -------------------------------------------------------------------------------- /codegen-engine/src/test/resources/templates/xml_config/feign_component_xml.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | D:\\spring-cloud-codegene-test 6 | java 7 | UserServiceFeignClient 8 | UserServiceFeignClient.java.ftl 9 | templates/feign/java/ 10 | feign 11 | cn.springcloud.codegen.component.feign 12 | CodeGenConstants.DEFAULT_ENCODE 13 | 14 | 15 | cn.springcloud.codegen.component.feign 16 | 17 | 18 | CodeOutType.JAVA 19 | 20 | 21 | -------------------------------------------------------------------------------- /codegen-ui/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false 5 | }], 6 | "stage-2" 7 | ], 8 | "plugins": ["transform-runtime"] 9 | } 10 | -------------------------------------------------------------------------------- /codegen-ui/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /codegen-ui/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | .vscode 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | -------------------------------------------------------------------------------- /codegen-ui/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserslist" field in package.json 6 | "postcss-import": {}, 7 | "autoprefixer": {} 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /codegen-ui/README.md: -------------------------------------------------------------------------------- 1 | # spring-cloud-codegen-ui 2 | 3 | > ui source for codegen 4 | 5 | **demo**: [http://start.springcloud.cn](http://start.springcloud.cn) 6 | 7 | # To start 8 | 9 | This is a project template for [vue-cli](https://github.com/vuejs/vue-cli) 10 | 11 | ``` bash 12 | # install dependencies 13 | npm install 14 | ``` 15 | 16 | ### serve with hot reload at localhost:7777 17 | ```shell 18 | # by api: http://127.0.0.1:3333 19 | npm run dev 20 | ``` 21 | 配置Hosts: 22 | 127.0.0.1 localhost 23 | 24 | ### serve with hot reload at localhost:8888 25 | ```shell 26 | # by api: http://codegen.smartscity.com/api/v1/swagger-ui.html 27 | npm run remote 28 | ``` 29 | 30 | ### serve with hot reload at localhost:9999 31 | ```shell 32 | # by api: http://codegen.smartscity.com/api/v2/swagger-ui.html 33 | #edit v1 to v2 34 | vim src/views/nav1/Form.vue 35 | replaceAll /v1/ to /v2/ 36 | npm run v2 37 | ``` 38 | 39 | 40 | ### build for production with minification 41 | ```shell 42 | npm run build 43 | 44 | ``` 45 | 46 | -------------------------------------------------------------------------------- /codegen-ui/build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /codegen-ui/build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /codegen-ui/build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/build/logo.png -------------------------------------------------------------------------------- /codegen-ui/build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const packageConfig = require('../package.json') 6 | 7 | exports.assetsPath = function (_path) { 8 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 9 | ? config.build.assetsSubDirectory 10 | : config.dev.assetsSubDirectory 11 | 12 | return path.posix.join(assetsSubDirectory, _path) 13 | } 14 | 15 | exports.cssLoaders = function (options) { 16 | options = options || {} 17 | 18 | const cssLoader = { 19 | loader: 'css-loader', 20 | options: { 21 | sourceMap: options.sourceMap 22 | } 23 | } 24 | 25 | const postcssLoader = { 26 | loader: 'postcss-loader', 27 | options: { 28 | sourceMap: options.sourceMap 29 | } 30 | } 31 | 32 | // generate loader string to be used with extract text plugin 33 | function generateLoaders (loader, loaderOptions) { 34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 35 | 36 | if (loader) { 37 | loaders.push({ 38 | loader: loader + '-loader', 39 | options: Object.assign({}, loaderOptions, { 40 | sourceMap: options.sourceMap 41 | }) 42 | }) 43 | } 44 | 45 | // Extract CSS when that option is specified 46 | // (which is the case during production build) 47 | if (options.extract) { 48 | return ExtractTextPlugin.extract({ 49 | use: loaders, 50 | fallback: 'vue-style-loader' 51 | }) 52 | } else { 53 | return ['vue-style-loader'].concat(loaders) 54 | } 55 | } 56 | 57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 58 | return { 59 | css: generateLoaders(), 60 | postcss: generateLoaders(), 61 | less: generateLoaders('less'), 62 | sass: generateLoaders('sass', { indentedSyntax: true }), 63 | scss: generateLoaders('sass'), 64 | stylus: generateLoaders('stylus'), 65 | styl: generateLoaders('stylus') 66 | } 67 | } 68 | 69 | // Generate loaders for standalone style files (outside of .vue) 70 | exports.styleLoaders = function (options) { 71 | const output = [] 72 | const loaders = exports.cssLoaders(options) 73 | 74 | for (const extension in loaders) { 75 | const loader = loaders[extension] 76 | output.push({ 77 | test: new RegExp('\\.' + extension + '$'), 78 | use: loader 79 | }) 80 | } 81 | 82 | return output 83 | } 84 | 85 | exports.createNotifierCallback = () => { 86 | const notifier = require('node-notifier') 87 | 88 | return (severity, errors) => { 89 | if (severity !== 'error') return 90 | 91 | const error = errors[0] 92 | const filename = error.file && error.file.split('!').pop() 93 | 94 | notifier.notify({ 95 | title: packageConfig.name, 96 | message: severity + ': ' + error.name, 97 | subtitle: filename || '', 98 | icon: path.join(__dirname, 'logo.png') 99 | }) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /codegen-ui/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /codegen-ui/build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | function resolve (dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | const createLintingRule = () => ({ 12 | test: /\.(js|vue)$/, 13 | loader: 'eslint-loader', 14 | enforce: 'pre', 15 | include: [resolve('src'), resolve('test')], 16 | options: { 17 | formatter: require('eslint-friendly-formatter'), 18 | emitWarning: !config.dev.showEslintErrorsInOverlay 19 | } 20 | }) 21 | 22 | module.exports = { 23 | context: path.resolve(__dirname, '../'), 24 | entry: { 25 | app: './src/main.js' 26 | }, 27 | output: { 28 | path: config.build.assetsRoot, 29 | filename: '[name].js', 30 | publicPath: process.env.NODE_ENV === 'production' 31 | ? config.build.assetsPublicPath 32 | : config.dev.assetsPublicPath 33 | }, 34 | resolve: { 35 | extensions: ['.js', '.vue', '.json'], 36 | alias: { 37 | 'vue$': 'vue/dist/vue.esm.js', 38 | '@': resolve('src'), 39 | 'scss_vars': '@/styles/vars.scss' 40 | } 41 | }, 42 | module: { 43 | rules: [ 44 | { 45 | test: /\.vue$/, 46 | loader: 'vue-loader', 47 | options: vueLoaderConfig 48 | }, 49 | { 50 | test: /\.js$/, 51 | loader: 'babel-loader', 52 | include: [resolve('src'), resolve('test')] 53 | }, 54 | { 55 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 56 | loader: 'url-loader', 57 | options: { 58 | limit: 10000, 59 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 60 | } 61 | }, 62 | { 63 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 64 | loader: 'url-loader', 65 | options: { 66 | limit: 10000, 67 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 68 | } 69 | }, 70 | { 71 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 72 | loader: 'url-loader', 73 | options: { 74 | limit: 10000, 75 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 76 | } 77 | } 78 | ] 79 | }, 80 | node: { 81 | // prevent webpack from injecting useless setImmediate polyfill because Vue 82 | // source contains it (although only uses it if it's native). 83 | setImmediate: false, 84 | // prevent webpack from injecting mocks to Node native modules 85 | // that does not make sense for the client 86 | dgram: 'empty', 87 | fs: 'empty', 88 | net: 'empty', 89 | tls: 'empty', 90 | child_process: 'empty' 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /codegen-ui/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const baseWebpackConfig = require('./webpack.base.conf') 7 | const HtmlWebpackPlugin = require('html-webpack-plugin') 8 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 9 | const portfinder = require('portfinder') 10 | 11 | const HOST = process.env.HOST 12 | const PORT = process.env.PORT && Number(process.env.PORT) 13 | 14 | const devWebpackConfig = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: config.dev.devtool, 20 | 21 | // these devServer options should be customized in /config/index.js 22 | devServer: { 23 | clientLogLevel: 'warning', 24 | historyApiFallback: true, 25 | hot: true, 26 | compress: true, 27 | host: HOST || config.dev.host, 28 | port: PORT || config.dev.port, 29 | open: config.dev.autoOpenBrowser, 30 | overlay: config.dev.errorOverlay 31 | ? { warnings: false, errors: true } 32 | : false, 33 | publicPath: config.dev.assetsPublicPath, 34 | proxy: config.dev.proxyTable, 35 | quiet: true, // necessary for FriendlyErrorsPlugin 36 | watchOptions: { 37 | poll: config.dev.poll, 38 | } 39 | }, 40 | plugins: [ 41 | new webpack.DefinePlugin({ 42 | 'process.env': require('../config/dev.env') 43 | }), 44 | new webpack.HotModuleReplacementPlugin(), 45 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 46 | new webpack.NoEmitOnErrorsPlugin(), 47 | // https://github.com/ampedandwired/html-webpack-plugin 48 | new HtmlWebpackPlugin({ 49 | filename: 'index.html', 50 | template: 'index.html', 51 | inject: true 52 | }), 53 | ] 54 | }) 55 | 56 | module.exports = new Promise((resolve, reject) => { 57 | portfinder.basePort = process.env.PORT || config.dev.port 58 | portfinder.getPort((err, port) => { 59 | if (err) { 60 | reject(err) 61 | } else { 62 | // publish the new Port, necessary for e2e tests 63 | process.env.PORT = port 64 | // add port to devServer config 65 | devWebpackConfig.devServer.port = port 66 | 67 | // Add FriendlyErrorsPlugin 68 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 69 | compilationSuccessInfo: { 70 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 71 | }, 72 | onErrors: config.dev.notifyOnErrors 73 | ? utils.createNotifierCallback() 74 | : undefined 75 | })) 76 | 77 | resolve(devWebpackConfig) 78 | } 79 | }) 80 | }) 81 | -------------------------------------------------------------------------------- /codegen-ui/build/webpack.remote.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const baseWebpackConfig = require('./webpack.base.conf') 7 | const HtmlWebpackPlugin = require('html-webpack-plugin') 8 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 9 | const portfinder = require('portfinder') 10 | 11 | const HOST = process.env.HOST 12 | const PORT = process.env.PORT && Number(process.env.PORT) 13 | 14 | const devWebpackConfig = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.remote.cssSourceMap, usePostCSS: true }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: config.remote.devtool, 20 | 21 | // these devServer options should be customized in /config/index.js 22 | devServer: { 23 | clientLogLevel: 'warning', 24 | historyApiFallback: true, 25 | hot: true, 26 | compress: true, 27 | host: HOST || config.remote.host, 28 | port: PORT || config.remote.port, 29 | open: config.remote.autoOpenBrowser, 30 | overlay: config.remote.errorOverlay 31 | ? { warnings: false, errors: true } 32 | : false, 33 | publicPath: config.remote.assetsPublicPath, 34 | proxy: config.remote.proxyTable, 35 | quiet: true, // necessary for FriendlyErrorsPlugin 36 | watchOptions: { 37 | poll: config.remote.poll, 38 | } 39 | }, 40 | plugins: [ 41 | new webpack.DefinePlugin({ 42 | 'process.env': require('../config/remote.env') 43 | }), 44 | new webpack.HotModuleReplacementPlugin(), 45 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 46 | new webpack.NoEmitOnErrorsPlugin(), 47 | // https://github.com/ampedandwired/html-webpack-plugin 48 | new HtmlWebpackPlugin({ 49 | filename: 'index.html', 50 | template: 'index.html', 51 | inject: true 52 | }), 53 | ] 54 | }) 55 | 56 | module.exports = new Promise((resolve, reject) => { 57 | portfinder.basePort = process.env.PORT || config.remote.port 58 | portfinder.getPort((err, port) => { 59 | if (err) { 60 | reject(err) 61 | } else { 62 | // publish the new Port, necessary for e2e tests 63 | process.env.PORT = port 64 | // add port to devServer config 65 | devWebpackConfig.devServer.port = port 66 | 67 | // Add FriendlyErrorsPlugin 68 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 69 | compilationSuccessInfo: { 70 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 71 | }, 72 | onErrors: config.remote.notifyOnErrors 73 | ? utils.createNotifierCallback() 74 | : undefined 75 | })) 76 | 77 | resolve(devWebpackConfig) 78 | } 79 | }) 80 | }) 81 | -------------------------------------------------------------------------------- /codegen-ui/build/webpack.v2.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const baseWebpackConfig = require('./webpack.base.conf') 7 | const HtmlWebpackPlugin = require('html-webpack-plugin') 8 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 9 | const portfinder = require('portfinder') 10 | 11 | const HOST = process.env.HOST 12 | const PORT = process.env.PORT && Number(process.env.PORT) 13 | 14 | const devWebpackConfig = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.v2.cssSourceMap, usePostCSS: true }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: config.v2.devtool, 20 | 21 | // these devServer options should be customized in /config/index.js 22 | devServer: { 23 | clientLogLevel: 'warning', 24 | historyApiFallback: true, 25 | hot: true, 26 | compress: true, 27 | host: HOST || config.v2.host, 28 | port: PORT || config.v2.port, 29 | open: config.v2.autoOpenBrowser, 30 | overlay: config.v2.errorOverlay 31 | ? { warnings: false, errors: true } 32 | : false, 33 | publicPath: config.v2.assetsPublicPath, 34 | proxy: config.v2.proxyTable, 35 | quiet: true, // necessary for FriendlyErrorsPlugin 36 | watchOptions: { 37 | poll: config.v2.poll, 38 | } 39 | }, 40 | plugins: [ 41 | new webpack.DefinePlugin({ 42 | 'process.env': require('../config/version.env') 43 | }), 44 | new webpack.HotModuleReplacementPlugin(), 45 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 46 | new webpack.NoEmitOnErrorsPlugin(), 47 | // https://github.com/ampedandwired/html-webpack-plugin 48 | new HtmlWebpackPlugin({ 49 | filename: 'index.html', 50 | template: 'index.html', 51 | inject: true 52 | }), 53 | ] 54 | }) 55 | 56 | module.exports = new Promise((resolve, reject) => { 57 | portfinder.basePort = process.env.PORT || config.v2.port 58 | portfinder.getPort((err, port) => { 59 | if (err) { 60 | reject(err) 61 | } else { 62 | // publish the new Port, necessary for e2e tests 63 | process.env.PORT = port 64 | // add port to devServer config 65 | devWebpackConfig.devServer.port = port 66 | 67 | // Add FriendlyErrorsPlugin 68 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 69 | compilationSuccessInfo: { 70 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 71 | }, 72 | onErrors: config.v2.notifyOnErrors 73 | ? utils.createNotifierCallback() 74 | : undefined 75 | })) 76 | 77 | resolve(devWebpackConfig) 78 | } 79 | }) 80 | }) 81 | -------------------------------------------------------------------------------- /codegen-ui/config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /codegen-ui/config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /codegen-ui/config/remote.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /codegen-ui/config/version.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /codegen-ui/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | spring-cloud-codegen-ui 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /codegen-ui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spring-cloud-codegen-ui", 3 | "version": "1.0.0", 4 | "description": "ui source for codegen", 5 | "author": "liumapp ", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "remote": "webpack-dev-server --inline --progress --config build/webpack.remote.conf.js", 10 | "v2": "webpack-dev-server --inline --progress --config build/webpack.v2.conf.js", 11 | "start": "npm run dev", 12 | "build": "node build/build.js" 13 | }, 14 | "dependencies": { 15 | "axios": "^0.15.3", 16 | "echarts": "^3.3.2", 17 | "element-ui": "^1.2.8", 18 | "font-awesome": "^4.7.0", 19 | "nprogress": "^0.2.0", 20 | "vue": "^2.5.2", 21 | "vue-cookie": "^1.1.4", 22 | "vue-router": "^3.0.1", 23 | "vuex": "^2.0.0-rc.6" 24 | }, 25 | "devDependencies": { 26 | "N3-components": "^2.4.2", 27 | "autoprefixer": "^7.1.2", 28 | "axios-mock-adapter": "^1.7.1", 29 | "babel-core": "^6.22.1", 30 | "babel-loader": "^7.1.1", 31 | "babel-plugin-transform-runtime": "^6.22.0", 32 | "babel-preset-env": "^1.3.2", 33 | "babel-preset-stage-2": "^6.22.0", 34 | "babel-polyfill": "^6.16.0", 35 | "babel-register": "^6.22.0", 36 | "connect-history-api-fallback": "^1.3.0", 37 | "mockjs": "^1.0.1-beta3", 38 | "chalk": "^2.0.1", 39 | "copy-webpack-plugin": "^4.0.1", 40 | "css-loader": "^0.28.0", 41 | "eventsource-polyfill": "^0.9.6", 42 | "extract-text-webpack-plugin": "^3.0.0", 43 | "express": "^4.14.1", 44 | "file-loader": "^1.1.4", 45 | "friendly-errors-webpack-plugin": "^1.6.1", 46 | "function-bind": "^1.0.2", 47 | "html-webpack-plugin": "^2.30.1", 48 | "http-proxy-middleware": "^0.17.3", 49 | "node-notifier": "^5.1.2", 50 | "optimize-css-assets-webpack-plugin": "^3.2.0", 51 | "ora": "^1.2.0", 52 | "opn": "^4.0.2", 53 | "portfinder": "^1.0.13", 54 | "postcss-import": "^11.0.0", 55 | "postcss-loader": "^2.0.8", 56 | "rimraf": "^2.6.0", 57 | "sass-loader": "^6.0.0", 58 | "semver": "^5.3.0", 59 | "shelljs": "^0.7.6", 60 | "node-sass": "^4.5.0", 61 | "json-loader": "^0.5.4", 62 | "uglifyjs-webpack-plugin": "^1.1.1", 63 | "url-loader": "^0.5.8", 64 | "vue-loader": "^13.3.0", 65 | "vue-style-loader": "^3.0.1", 66 | "vue-template-compiler": "^2.5.2", 67 | "webpack": "^3.6.0", 68 | "webpack-bundle-analyzer": "^2.9.0", 69 | "webpack-hot-middleware": "^2.16.1", 70 | "webpack-dev-server": "^2.9.1", 71 | "webpack-merge": "^4.1.0" 72 | }, 73 | "engines": { 74 | "node": ">= 4.0.0", 75 | "npm": ">= 3.0.0" 76 | }, 77 | "browserslist": [ 78 | "> 1%", 79 | "last 2 versions", 80 | "not ie <= 8" 81 | ] 82 | } 83 | -------------------------------------------------------------------------------- /codegen-ui/src/App.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 21 | 22 | 71 | -------------------------------------------------------------------------------- /codegen-ui/src/api/api.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | let base = ''; 4 | 5 | export const requestLogin = params => { return axios.post(`${base}/login`, params).then(res => res.data); }; 6 | 7 | export const getUserList = params => { return axios.get(`${base}/user/list`, { params: params }); }; 8 | 9 | export const getUserListPage = params => { return axios.get(`${base}/user/listpage`, { params: params }); }; 10 | 11 | export const removeUser = params => { return axios.get(`${base}/user/remove`, { params: params }); }; 12 | 13 | export const batchRemoveUser = params => { return axios.get(`${base}/user/batchremove`, { params: params }); }; 14 | 15 | export const editUser = params => { return axios.get(`${base}/user/edit`, { params: params }); }; 16 | 17 | export const addUser = params => { return axios.get(`${base}/user/add`, { params: params }); }; -------------------------------------------------------------------------------- /codegen-ui/src/api/index.js: -------------------------------------------------------------------------------- 1 | import * as api from './api'; 2 | 3 | export default api; -------------------------------------------------------------------------------- /codegen-ui/src/assets/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/bg1.jpg -------------------------------------------------------------------------------- /codegen-ui/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/logo.png -------------------------------------------------------------------------------- /codegen-ui/src/assets/logo4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/logo4.png -------------------------------------------------------------------------------- /codegen-ui/src/assets/sw-footer-sprite1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/sw-footer-sprite1.png -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/alert.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;color:#fff;opacity:1;display:table;transition:opacity .2s}.el-alert .el-alert__description{color:#fff;font-size:12px;margin:5px 0 0}.el-alert--success{background-color:#13ce66}.el-alert--info{background-color:#50bfff}.el-alert--warning{background-color:#f7ba2a}.el-alert--error{background-color:#ff4949}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px;display:table-cell;color:#fff;vertical-align:middle}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert__closebtn{font-size:12px;color:#fff;opacity:1;top:12px;right:15px;position:absolute;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/badge.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#ff4949;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-dot{width:8px;height:8px;padding:0;right:0;border-radius:50%}.el-badge__content.is-fixed{top:0;right:10px;position:absolute;-ms-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/breadcrumb-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/breadcrumb-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/breadcrumb.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-breadcrumb{font-size:13px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 8px;color:rgb(191, 203, 217)}.el-breadcrumb__item{float:left}.el-breadcrumb__item:last-child .el-breadcrumb__item__inner,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner:hover{color:rgb(151, 168, 190);cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-breadcrumb__item__inner,.el-breadcrumb__item__inner a{transition:color .15s linear;color:rgb(72, 87, 106)}.el-breadcrumb__item__inner a:hover,.el-breadcrumb__item__inner:hover{color:#1d8ce0;cursor:pointer} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/button-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/button-group.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/card.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-card{border:1px solid rgb(209, 219, 229);border-radius:4px;background-color:#fff;overflow:hidden;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-card__header{padding:18px 20px;border-bottom:1px solid rgb(209, 219, 229);box-sizing:border-box}.el-card__body{padding:20px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/carousel-item.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;transition:.4s ease-in-out;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;transition:.2s} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/carousel.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-carousel__arrow,.el-carousel__button{outline:0;margin:0;cursor:pointer;transition:.3s}.el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;padding:0;width:36px;height:36px;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-ms-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-ms-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:rgb(131, 145, 165);opacity:.24}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;padding:0}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-ms-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-ms-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/checkbox-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/checkbox-group.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/checkbox.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-checkbox,.el-checkbox__input{white-space:nowrap;cursor:pointer;display:inline-block;position:relative}.el-checkbox{color:rgb(31, 45, 61);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox+.el-checkbox{margin-left:15px}.el-checkbox__input{outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#1d8ce0;border-color:rgb(1, 130, 228)}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;border:1px solid #fff;margin-top:-1px;left:3px;right:3px;top:50%}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#1d8ce0}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#1d8ce0;border-color:rgb(1, 130, 228)}.el-checkbox__input.is-checked .el-checkbox__inner::after{-ms-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:rgb(238, 241, 246);border-color:rgb(209, 219, 229);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:rgb(238, 241, 246)}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:rgb(209, 219, 229);border-color:rgb(209, 219, 229)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#fff}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:rgb(209, 219, 229);border-color:rgb(209, 219, 229)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{border-color:#fff}.el-checkbox__input.is-disabled+.el-checkbox__label{color:#bbb;cursor:not-allowed}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid rgb(191, 203, 217);border-radius:4px;box-sizing:border-box;width:18px;height:18px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#1d8ce0}.el-checkbox__inner::after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:5px;position:absolute;top:1px;-ms-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;-ms-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.el-checkbox__label{font-size:14px;padding-left:5px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/collapse-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/collapse-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/collapse.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-collapse{border:1px solid rgb(223, 230, 236);border-radius:0}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-item.is-active>.el-collapse-item__header .el-collapse-item__header__arrow{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header{height:43px;line-height:43px;padding-left:15px;background-color:#fff;color:rgb(72, 87, 106);cursor:pointer;border-bottom:1px solid rgb(223, 230, 236);font-size:13px}.el-collapse-item__header__arrow{margin-right:8px;transition:transform .3s}.el-collapse-item__wrap{will-change:height;background-color:rgb(250, 253, 254);overflow:hidden;box-sizing:border-box;border-bottom:1px solid rgb(223, 230, 236)}.el-collapse-item__content{padding:10px 15px;font-size:13px;color:rgb(31, 45, 61);line-height:1.769230769230769} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/dialog.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-dialog{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);background:#fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box}.el-dialog--tiny{width:30%}.el-dialog--small{width:50%}.el-dialog--large{width:90%}.el-dialog--full{width:100%;top:0;height:100%;overflow:auto}.el-dialog__wrapper{top:0;right:0;bottom:0;left:0;position:fixed;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 0}.el-dialog__close{cursor:pointer;color:rgb(191, 203, 217)}.el-dialog__close:hover{color:#1d8ce0}.el-dialog__title{line-height:1;font-size:16px;font-weight:700;color:rgb(31, 45, 61)}.el-dialog__body{padding:30px 20px;color:rgb(72, 87, 106);font-size:14px}.el-dialog__headerbtn{float:right}.el-dialog__footer{padding:10px 20px 15px;text-align:right;box-sizing:border-box}.dialog-fade-enter-active{animation:dialog-fade-in .3s}.dialog-fade-leave-active{animation:dialog-fade-out .3s}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/dropdown-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/dropdown-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/dropdown-menu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/dropdown-menu.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/fonts/element-icons.ttf -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/fonts/element-icons.woff -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/form-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/form-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/form.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item:after,.el-form-item__content:after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-form-item .el-form-item__content{margin-left:0!important}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner,.el-form-item.is-error .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-textarea__inner{border-color:#ff4949}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#ff4949;margin-right:4px}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:rgb(72, 87, 106);line-height:1;padding:11px 12px 11px 0;box-sizing:border-box}.el-form-item__content{line-height:36px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__error{color:#ff4949;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/icon.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:element-icons;src:url(fonts/element-icons.woff?t=1472440741) format('woff'),url(fonts/element-icons.ttf?t=1472440741) format('truetype');font-weight:400;font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-arrow-down:before{content:"\e600"}.el-icon-arrow-left:before{content:"\e601"}.el-icon-arrow-right:before{content:"\e602"}.el-icon-arrow-up:before{content:"\e603"}.el-icon-caret-bottom:before{content:"\e604"}.el-icon-caret-left:before{content:"\e605"}.el-icon-caret-right:before{content:"\e606"}.el-icon-caret-top:before{content:"\e607"}.el-icon-check:before{content:"\e608"}.el-icon-circle-check:before{content:"\e609"}.el-icon-circle-close:before{content:"\e60a"}.el-icon-circle-cross:before{content:"\e60b"}.el-icon-close:before{content:"\e60c"}.el-icon-upload:before{content:"\e60d"}.el-icon-d-arrow-left:before{content:"\e60e"}.el-icon-d-arrow-right:before{content:"\e60f"}.el-icon-d-caret:before{content:"\e610"}.el-icon-date:before{content:"\e611"}.el-icon-delete:before{content:"\e612"}.el-icon-document:before{content:"\e613"}.el-icon-edit:before{content:"\e614"}.el-icon-information:before{content:"\e615"}.el-icon-loading:before{content:"\e616"}.el-icon-menu:before{content:"\e617"}.el-icon-message:before{content:"\e618"}.el-icon-minus:before{content:"\e619"}.el-icon-more:before{content:"\e61a"}.el-icon-picture:before{content:"\e61b"}.el-icon-plus:before{content:"\e61c"}.el-icon-search:before{content:"\e61d"}.el-icon-setting:before{content:"\e61e"}.el-icon-share:before{content:"\e61f"}.el-icon-star-off:before{content:"\e620"}.el-icon-star-on:before{content:"\e621"}.el-icon-time:before{content:"\e622"}.el-icon-warning:before{content:"\e623"}.el-icon-delete2:before{content:"\e624"}.el-icon-upload2:before{content:"\e627"}.el-icon-view:before{content:"\e626"}.el-icon-loading{animation:rotating 1s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/loading.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-loading-mask{position:absolute;z-index:10000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{width:50px;height:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#1d8ce0;margin:3px 0;font-size:14px}.el-loading-spinner .circular{width:42px;height:42px;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#1d8ce0;stroke-linecap:round}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@keyframes loading-rotate{100%{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/menu-item-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/menu-item-group.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/menu-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/menu-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/message.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-message{box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);min-width:300px;padding:10px 12px;box-sizing:border-box;border-radius:2px;position:fixed;left:50%;top:20px;-ms-transform:translateX(-50%);transform:translateX(-50%);background-color:#fff;transition:opacity .3s,transform .4s;overflow:hidden}.el-message .el-icon-circle-check{color:#13ce66}.el-message .el-icon-circle-cross{color:#ff4949}.el-message .el-icon-information{color:#50bfff}.el-message .el-icon-warning{color:#f7ba2a}.el-message__group{margin-left:38px;position:relative;height:20px;line-height:20px}.el-message__group p{font-size:14px;margin:0 34px 0 0;white-space:nowrap;color:rgb(131, 145, 165);text-align:justify}.el-message__group.is-with-icon{margin-left:0}.el-message__img{width:40px;height:40px;position:absolute;left:0;top:0}.el-message__icon{vertical-align:middle;margin-right:8px}.el-message__closeBtn{top:3px;right:0;position:absolute;cursor:pointer;color:rgb(191, 203, 217);font-size:14px}.el-message__closeBtn:hover{color:rgb(151, 168, 190)}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-ms-transform:translate(-50%,-100%);transform:translate(-50%,-100%)} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/notification.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-notification{width:330px;padding:20px;box-sizing:border-box;border-radius:2px;position:fixed;right:16px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);transition:opacity .3s,transform .3s,right .3s,top .4s;overflow:hidden}.el-notification .el-icon-circle-check{color:#13ce66}.el-notification .el-icon-circle-cross{color:#ff4949}.el-notification .el-icon-information{color:#50bfff}.el-notification .el-icon-warning{color:#f7ba2a}.el-notification__group{margin-left:0}.el-notification__group.is-with-icon{margin-left:55px}.el-notification__title{font-weight:400;font-size:16px;color:rgb(31, 45, 61);margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:10px 0 0;color:rgb(131, 145, 165);text-align:justify}.el-notification__icon{width:40px;height:40px;font-size:40px;float:left;position:relative;top:3px}.el-notification__closeBtn{top:20px;right:20px;position:absolute;cursor:pointer;color:rgb(191, 203, 217);font-size:14px}.el-notification__closeBtn:hover{color:rgb(151, 168, 190)}.el-notification-fade-enter{-ms-transform:translateX(100%);transform:translateX(100%);right:0}.el-notification-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/option-group.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-group{margin:0;padding:0}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-group__wrap{list-style:none;margin:0;padding:0}.el-select-group__title{padding-left:10px;font-size:12px;color:#999;height:30px;line-height:30px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/option.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-dropdown__item{font-size:14px;padding:8px 10px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgb(72, 87, 106);height:36px;line-height:1.5;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.hover{background-color:rgb(228, 232, 241)}.el-select-dropdown__item.selected{color:#fff;background-color:#1d8ce0}.el-select-dropdown__item.selected.hover{background-color:rgb(26, 123, 197)}.el-select-dropdown__item span{line-height:1.5!important}.el-select-dropdown__item.is-disabled{color:rgb(191, 203, 217);cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/popover.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:2px;border:1px solid rgb(209, 219, 229);padding:10px;z-index:2000;font-size:12px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-popover .popper__arrow,.el-popover .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popover .popper__arrow{border-width:6px}.el-popover .popper__arrow::after{content:" ";border-width:6px}.el-popover[x-placement^=top]{margin-bottom:12px}.el-popover[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:rgb(209, 219, 229);border-bottom-width:0}.el-popover[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popover[x-placement^=bottom]{margin-top:12px}.el-popover[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:rgb(209, 219, 229)}.el-popover[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popover[x-placement^=right]{margin-left:12px}.el-popover[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:rgb(209, 219, 229);border-left-width:0}.el-popover[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popover[x-placement^=left]{margin-right:12px}.el-popover[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:rgb(209, 219, 229)}.el-popover[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover__title{color:rgb(31, 45, 61);font-size:13px;line-height:1;margin-bottom:9px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/progress.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress{position:relative;line-height:1}.el-progress.is-exception .el-progress-bar__inner{background-color:#ff4949}.el-progress.is-exception .el-progress__text{color:#ff4949}.el-progress.is-success .el-progress-bar__inner{background-color:#13ce66}.el-progress.is-success .el-progress__text{color:#13ce66}.el-progress__text{font-size:14px;color:rgb(72, 87, 106);display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle{display:inline-block}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-ms-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:rgb(228, 232, 241);overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#1d8ce0;text-align:right;border-radius:100px;line-height:1}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/radio-button.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/radio-button.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/radio-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/radio-group.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/rate.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:rgb(191, 203, 217);transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-ms-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/reset.css: -------------------------------------------------------------------------------- 1 | progress,sub,sup{vertical-align:baseline}button,hr,input{overflow:visible}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#1d8ce0;text-decoration:none}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;vertical-align:middle}optgroup{font-weight:700}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto;resize:none;vertical-align:top}input,select,textarea{outline:0}[disabled]{cursor:default}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}input::-moz-placeholder,textarea::-moz-placeholder{color:inherit;opacity:.54}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:inherit;opacity:.54}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:inherit;opacity:.54}input::-ms-clear,input::-ms-reveal{display:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}blockquote,figure,form,h1,h2,h3,h4,h5,h6,p{margin:0}dd,dl,li,ol,ul{margin:0;padding:0}ol,ul{list-style:none}body{margin:0;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-weight:400;font-size:14px;color:rgb(31, 45, 61)}a:focus,a:hover{color:rgb(74, 163, 230)}a:active{color:rgb(26, 126, 202)}h1,h2,h3,h4,h5,h6{color:rgb(31, 45, 61);font-weight:inherit}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,h6:last-child,p:last-child{margin-bottom:0}h1{font-size:20px}h2{font-size:18px}h3{font-size:16px}h4,h5,h6,p{font-size:inherit}p{line-height:1.8}sub,sup{font-size:13px}small{font-size:12px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/row.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-row:after,.el-row:before{display:table;content:""}.el-row:after{clear:both}.el-row{position:relative;box-sizing:border-box}.el-row--flex{display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-align-bottom{-ms-flex-align:end;align-items:flex-end}.el-row--flex.is-align-middle{-ms-flex-align:center;align-items:center}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-justify-space-between{-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-end{-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-center{-ms-flex-pack:center;justify-content:center} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/scrollbar.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active .el-scrollbar__bar,.el-scrollbar:focus .el-scrollbar__bar,.el-scrollbar:hover .el-scrollbar__bar{opacity:1;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(151,168,190,.3);transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(151,168,190,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/select-dropdown.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-dropdown{position:absolute;z-index:1001;border:1px solid rgb(209, 219, 229);border-radius:2px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-sizing:border-box;margin:5px 0}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#1d8ce0;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:rgb(228, 232, 241)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:10px;font-family:element-icons;content:"\E608";font-size:11px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/spinner.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/step.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-step.is-horizontal,.el-step.is-vertical .el-step__head,.el-step.is-vertical .el-step__main,.el-step__line{display:inline-block}.el-step{position:relative;vertical-align:top}.el-step.is-vertical .el-step__main{padding-left:10px}.el-step__line{position:absolute;border-color:inherit;background-color:rgb(191, 203, 217)}.el-step__line.is-vertical{width:2px;box-sizing:border-box;top:32px;bottom:0;left:15px}.el-step__line.is-horizontal{top:15px;height:2px;left:32px;right:0}.el-step__line.is-icon.is-horizontal{right:4px}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:all 150ms;width:0;height:0}.el-step__icon{display:block;line-height:28px}.el-step__icon>*{line-height:inherit;vertical-align:middle}.el-step__head{width:28px;height:28px;border-radius:50%;background-color:transparent;text-align:center;line-height:28px;font-size:28px;vertical-align:top;transition:all 150ms}.el-step__head.is-finish{color:#1d8ce0;border-color:#1d8ce0}.el-step__head.is-error{color:#ff4949;border-color:#ff4949}.el-step__head.is-success{color:#13ce66;border-color:#13ce66}.el-step__head.is-process,.el-step__head.is-wait{color:rgb(191, 203, 217);border-color:rgb(191, 203, 217)}.el-step__head.is-text{font-size:14px;border-width:2px;border-style:solid}.el-step__head.is-text.is-finish{color:#fff;background-color:#1d8ce0;border-color:#1d8ce0}.el-step__head.is-text.is-error{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-step__head.is-text.is-success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-step__head.is-text.is-wait{color:rgb(191, 203, 217);background-color:#fff;border-color:rgb(191, 203, 217)}.el-step__head.is-text.is-process{color:#fff;background-color:rgb(191, 203, 217);border-color:rgb(191, 203, 217)}.el-step__main{white-space:normal;padding-right:10px;text-align:left}.el-step__title{font-size:14px;line-height:32px;display:inline-block}.el-step__title.is-finish{font-weight:700;color:#1d8ce0}.el-step__title.is-error{font-weight:700;color:#ff4949}.el-step__title.is-success{font-weight:700;color:#13ce66}.el-step__title.is-wait{font-weight:400;color:rgb(151, 168, 190)}.el-step__title.is-process{font-weight:700;color:rgb(72, 87, 106)}.el-step__description{font-size:12px;font-weight:400;line-height:14px}.el-step__description.is-finish{color:#1d8ce0}.el-step__description.is-error{color:#ff4949}.el-step__description.is-success{color:#13ce66}.el-step__description.is-wait{color:rgb(191, 203, 217)}.el-step__description.is-process{color:rgb(131, 145, 165)} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/steps.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-steps{font-size:0}.el-steps>:last-child .el-step__line{display:none}.el-steps.is-horizontal{white-space:nowrap}.el-steps.is-horizontal.is-center{text-align:center} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/submenu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/submenu.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/switch.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-switch{display:inline-block;position:relative;font-size:14px;line-height:22px;height:22px;vertical-align:middle}.el-switch__label,.el-switch__label *{position:absolute;font-size:14px;display:inline-block}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-switch.is-disabled .el-switch__core{border-color:rgb(228, 232, 241)!important;background:rgb(228, 232, 241)!important}.el-switch.is-disabled .el-switch__core span{background-color:rgb(250, 253, 254)!important}.el-switch.is-disabled .el-switch__core~.el-switch__label *{color:rgb(250, 253, 254)!important}.el-switch.is-disabled .el-switch__input:checked+.el-switch__core{border-color:rgb(228, 232, 241);background-color:rgb(228, 232, 241)}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{width:46px;height:22px;cursor:pointer}.el-switch__label{transition:.2s;z-index:10;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-switch__label *{line-height:1;top:4px;color:#fff}.el-switch__label--left i{left:6px}.el-switch__label--right i{right:6px}.el-switch__input{display:none}.el-switch__input:checked+.el-switch__core{border-color:#1d8ce0;background-color:#1d8ce0}.el-switch__core{margin:0;display:inline-block;position:relative;border:1px solid rgb(191, 203, 217);outline:0;border-radius:12px;box-sizing:border-box;background:rgb(191, 203, 217);transition:border-color .3s,background-color .3s}.el-switch__core .el-switch__button{top:0;left:0;position:absolute;border-radius:100%;transition:transform .3s;width:16px;height:16px;z-index:20;background-color:#fff}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/tab-pane.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-darkblue/tab-pane.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/tag.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tag{background-color:rgb(131, 145, 165);display:inline-block;padding:0 5px;height:24px;line-height:22px;font-size:12px;color:#fff;border-radius:4px;box-sizing:border-box;border:1px solid transparent;white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;-ms-transform:scale(.75,.75);transform:scale(.75,.75);height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-2px}.el-tag .el-icon-close:hover{background-color:#fff;color:rgb(131, 145, 165)}.el-tag--gray{background-color:rgb(228, 232, 241);border-color:rgb(228, 232, 241);color:rgb(72, 87, 106)}.el-tag--gray .el-tag__close:hover{background-color:rgb(72, 87, 106);color:#fff}.el-tag--gray.is-hit{border-color:rgb(72, 87, 106)}.el-tag--primary{background-color:rgba(32,160,255,.1);border-color:rgba(32,160,255,.2);color:#1d8ce0}.el-tag--primary .el-tag__close:hover{background-color:#1d8ce0;color:#fff}.el-tag--primary.is-hit{border-color:#1d8ce0}.el-tag--success{background-color:rgba(18,206,102,.1);border-color:rgba(18,206,102,.2);color:#13ce66}.el-tag--success .el-tag__close:hover{background-color:#13ce66;color:#fff}.el-tag--success.is-hit{border-color:#13ce66}.el-tag--warning{background-color:rgba(247,186,41,.1);border-color:rgba(247,186,41,.2);color:#f7ba2a}.el-tag--warning .el-tag__close:hover{background-color:#f7ba2a;color:#fff}.el-tag--warning.is-hit{border-color:#f7ba2a}.el-tag--danger{background-color:rgba(255,73,73,.1);border-color:rgba(255,73,73,.2);color:#ff4949}.el-tag--danger .el-tag__close:hover{background-color:#ff4949;color:#fff}.el-tag--danger.is-hit{border-color:#ff4949} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/tooltip.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:rgb(31, 45, 61);border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:rgb(31, 45, 61);border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:rgb(31, 45, 61)}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:rgb(31, 45, 61)}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:rgb(31, 45, 61);border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:rgb(31, 45, 61);border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:rgb(31, 45, 61)}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light{background:#fff;border:1px solid rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-tooltip__popper.is-dark{background:rgb(31, 45, 61);color:#fff} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-darkblue/tree.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tree{cursor:default;background:#fff;border:1px solid rgb(209, 219, 229)}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#5e7382}.el-tree-node{white-space:nowrap}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree-node__expand-icon,.el-tree-node__label,.el-tree-node__loading-icon{display:inline-block;vertical-align:middle}.el-tree-node__content{line-height:36px;height:36px;cursor:pointer}.el-tree-node__content>.el-checkbox,.el-tree-node__content>.el-tree-node__expand-icon{margin-right:8px}.el-tree-node__content>.el-checkbox{vertical-align:middle}.el-tree-node__content:hover{background:rgb(228, 232, 241)}.el-tree-node__expand-icon{cursor:pointer;width:0;height:0;margin-left:10px;border:6px solid transparent;border-right-width:0;border-left-color:rgb(151, 168, 190);border-left-width:7px;-ms-transform:rotate(0);transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon:hover{border-left-color:#999}.el-tree-node__expand-icon.expanded{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{border-color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:4px;font-size:14px;color:rgb(151, 168, 190)}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:rgb(237, 246, 253)} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/alert.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;color:#fff;opacity:1;display:table;transition:opacity .2s}.el-alert .el-alert__description{color:#fff;font-size:12px;margin:5px 0 0}.el-alert--success{background-color:#13ce66}.el-alert--info{background-color:#50bfff}.el-alert--warning{background-color:#f7ba2a}.el-alert--error{background-color:#ff4949}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px;display:table-cell;color:#fff;vertical-align:middle}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert__closebtn{font-size:12px;color:#fff;opacity:1;top:12px;right:15px;position:absolute;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/badge.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#ff4949;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-dot{width:8px;height:8px;padding:0;right:0;border-radius:50%}.el-badge__content.is-fixed{top:0;right:10px;position:absolute;-ms-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/breadcrumb-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/breadcrumb-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/breadcrumb.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-breadcrumb{font-size:13px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 8px;color:rgb(191, 217, 214)}.el-breadcrumb__item{float:left}.el-breadcrumb__item:last-child .el-breadcrumb__item__inner,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner:hover{color:rgb(151, 190, 187);cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-breadcrumb__item__inner,.el-breadcrumb__item__inner a{transition:color .15s linear;color:rgb(72, 106, 103)}.el-breadcrumb__item__inner a:hover,.el-breadcrumb__item__inner:hover{color:#18c79c;cursor:pointer} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/button-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/button-group.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/card.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-card{border:1px solid rgb(209, 229, 227);border-radius:4px;background-color:#fff;overflow:hidden;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-card__header{padding:18px 20px;border-bottom:1px solid rgb(209, 229, 227);box-sizing:border-box}.el-card__body{padding:20px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/carousel-item.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;transition:.4s ease-in-out;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;transition:.2s} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/carousel.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-carousel__arrow,.el-carousel__button{outline:0;margin:0;cursor:pointer;transition:.3s}.el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;padding:0;width:36px;height:36px;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-ms-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-ms-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:rgb(131, 165, 162);opacity:.24}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;padding:0}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-ms-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-ms-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/checkbox-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/checkbox-group.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/checkbox.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-checkbox,.el-checkbox__input{white-space:nowrap;cursor:pointer;display:inline-block;position:relative}.el-checkbox{color:rgb(31, 61, 57);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox+.el-checkbox{margin-left:15px}.el-checkbox__input{outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#18c79c;border-color:rgb(1, 203, 152)}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;border:1px solid #fff;margin-top:-1px;left:3px;right:3px;top:50%}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#18c79c}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#18c79c;border-color:rgb(1, 203, 152)}.el-checkbox__input.is-checked .el-checkbox__inner::after{-ms-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:rgb(238, 246, 246);border-color:rgb(209, 229, 227);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:rgb(238, 246, 246)}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:rgb(209, 229, 227);border-color:rgb(209, 229, 227)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#fff}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:rgb(209, 229, 227);border-color:rgb(209, 229, 227)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{border-color:#fff}.el-checkbox__input.is-disabled+.el-checkbox__label{color:#bbb;cursor:not-allowed}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid rgb(191, 217, 214);border-radius:4px;box-sizing:border-box;width:18px;height:18px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#18c79c}.el-checkbox__inner::after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:5px;position:absolute;top:1px;-ms-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;-ms-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.el-checkbox__label{font-size:14px;padding-left:5px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/collapse-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/collapse-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/collapse.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-collapse{border:1px solid rgb(223, 236, 234);border-radius:0}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-item.is-active>.el-collapse-item__header .el-collapse-item__header__arrow{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header{height:43px;line-height:43px;padding-left:15px;background-color:#fff;color:rgb(72, 106, 103);cursor:pointer;border-bottom:1px solid rgb(223, 236, 234);font-size:13px}.el-collapse-item__header__arrow{margin-right:8px;transition:transform .3s}.el-collapse-item__wrap{will-change:height;background-color:rgb(250, 254, 253);overflow:hidden;box-sizing:border-box;border-bottom:1px solid rgb(223, 236, 234)}.el-collapse-item__content{padding:10px 15px;font-size:13px;color:rgb(31, 61, 57);line-height:1.769230769230769} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/dialog.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-dialog{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);background:#fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box}.el-dialog--tiny{width:30%}.el-dialog--small{width:50%}.el-dialog--large{width:90%}.el-dialog--full{width:100%;top:0;height:100%;overflow:auto}.el-dialog__wrapper{top:0;right:0;bottom:0;left:0;position:fixed;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 0}.el-dialog__close{cursor:pointer;color:rgb(191, 217, 214)}.el-dialog__close:hover{color:#18c79c}.el-dialog__title{line-height:1;font-size:16px;font-weight:700;color:rgb(31, 61, 57)}.el-dialog__body{padding:30px 20px;color:rgb(72, 106, 103);font-size:14px}.el-dialog__headerbtn{float:right}.el-dialog__footer{padding:10px 20px 15px;text-align:right;box-sizing:border-box}.dialog-fade-enter-active{animation:dialog-fade-in .3s}.dialog-fade-leave-active{animation:dialog-fade-out .3s}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/dropdown-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/dropdown-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/dropdown-menu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/dropdown-menu.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/fonts/element-icons.ttf -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/fonts/element-icons.woff -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/form-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/form-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/form.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item:after,.el-form-item__content:after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-form-item .el-form-item__content{margin-left:0!important}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner,.el-form-item.is-error .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-textarea__inner{border-color:#ff4949}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#ff4949;margin-right:4px}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:rgb(72, 106, 103);line-height:1;padding:11px 12px 11px 0;box-sizing:border-box}.el-form-item__content{line-height:36px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__error{color:#ff4949;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/icon.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:element-icons;src:url(fonts/element-icons.woff?t=1472440741) format('woff'),url(fonts/element-icons.ttf?t=1472440741) format('truetype');font-weight:400;font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-arrow-down:before{content:"\e600"}.el-icon-arrow-left:before{content:"\e601"}.el-icon-arrow-right:before{content:"\e602"}.el-icon-arrow-up:before{content:"\e603"}.el-icon-caret-bottom:before{content:"\e604"}.el-icon-caret-left:before{content:"\e605"}.el-icon-caret-right:before{content:"\e606"}.el-icon-caret-top:before{content:"\e607"}.el-icon-check:before{content:"\e608"}.el-icon-circle-check:before{content:"\e609"}.el-icon-circle-close:before{content:"\e60a"}.el-icon-circle-cross:before{content:"\e60b"}.el-icon-close:before{content:"\e60c"}.el-icon-upload:before{content:"\e60d"}.el-icon-d-arrow-left:before{content:"\e60e"}.el-icon-d-arrow-right:before{content:"\e60f"}.el-icon-d-caret:before{content:"\e610"}.el-icon-date:before{content:"\e611"}.el-icon-delete:before{content:"\e612"}.el-icon-document:before{content:"\e613"}.el-icon-edit:before{content:"\e614"}.el-icon-information:before{content:"\e615"}.el-icon-loading:before{content:"\e616"}.el-icon-menu:before{content:"\e617"}.el-icon-message:before{content:"\e618"}.el-icon-minus:before{content:"\e619"}.el-icon-more:before{content:"\e61a"}.el-icon-picture:before{content:"\e61b"}.el-icon-plus:before{content:"\e61c"}.el-icon-search:before{content:"\e61d"}.el-icon-setting:before{content:"\e61e"}.el-icon-share:before{content:"\e61f"}.el-icon-star-off:before{content:"\e620"}.el-icon-star-on:before{content:"\e621"}.el-icon-time:before{content:"\e622"}.el-icon-warning:before{content:"\e623"}.el-icon-delete2:before{content:"\e624"}.el-icon-upload2:before{content:"\e627"}.el-icon-view:before{content:"\e626"}.el-icon-loading{animation:rotating 1s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/loading.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-loading-mask{position:absolute;z-index:10000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{width:50px;height:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#18c79c;margin:3px 0;font-size:14px}.el-loading-spinner .circular{width:42px;height:42px;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#18c79c;stroke-linecap:round}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@keyframes loading-rotate{100%{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/menu-item-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/menu-item-group.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/menu-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/menu-item.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/message.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-message{box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);min-width:300px;padding:10px 12px;box-sizing:border-box;border-radius:2px;position:fixed;left:50%;top:20px;-ms-transform:translateX(-50%);transform:translateX(-50%);background-color:#fff;transition:opacity .3s,transform .4s;overflow:hidden}.el-message .el-icon-circle-check{color:#13ce66}.el-message .el-icon-circle-cross{color:#ff4949}.el-message .el-icon-information{color:#50bfff}.el-message .el-icon-warning{color:#f7ba2a}.el-message__group{margin-left:38px;position:relative;height:20px;line-height:20px}.el-message__group p{font-size:14px;margin:0 34px 0 0;white-space:nowrap;color:rgb(131, 165, 162);text-align:justify}.el-message__group.is-with-icon{margin-left:0}.el-message__img{width:40px;height:40px;position:absolute;left:0;top:0}.el-message__icon{vertical-align:middle;margin-right:8px}.el-message__closeBtn{top:3px;right:0;position:absolute;cursor:pointer;color:rgb(191, 217, 214);font-size:14px}.el-message__closeBtn:hover{color:rgb(151, 190, 187)}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-ms-transform:translate(-50%,-100%);transform:translate(-50%,-100%)} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/notification.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-notification{width:330px;padding:20px;box-sizing:border-box;border-radius:2px;position:fixed;right:16px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);transition:opacity .3s,transform .3s,right .3s,top .4s;overflow:hidden}.el-notification .el-icon-circle-check{color:#13ce66}.el-notification .el-icon-circle-cross{color:#ff4949}.el-notification .el-icon-information{color:#50bfff}.el-notification .el-icon-warning{color:#f7ba2a}.el-notification__group{margin-left:0}.el-notification__group.is-with-icon{margin-left:55px}.el-notification__title{font-weight:400;font-size:16px;color:rgb(31, 61, 57);margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:10px 0 0;color:rgb(131, 165, 162);text-align:justify}.el-notification__icon{width:40px;height:40px;font-size:40px;float:left;position:relative;top:3px}.el-notification__closeBtn{top:20px;right:20px;position:absolute;cursor:pointer;color:rgb(191, 217, 214);font-size:14px}.el-notification__closeBtn:hover{color:rgb(151, 190, 187)}.el-notification-fade-enter{-ms-transform:translateX(100%);transform:translateX(100%);right:0}.el-notification-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/option-group.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-group{margin:0;padding:0}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-group__wrap{list-style:none;margin:0;padding:0}.el-select-group__title{padding-left:10px;font-size:12px;color:#999;height:30px;line-height:30px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/option.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-dropdown__item{font-size:14px;padding:8px 10px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgb(72, 106, 103);height:36px;line-height:1.5;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.hover{background-color:rgb(228, 241, 241)}.el-select-dropdown__item.selected{color:#fff;background-color:#18c79c}.el-select-dropdown__item.selected.hover{background-color:rgb(21, 175, 137)}.el-select-dropdown__item span{line-height:1.5!important}.el-select-dropdown__item.is-disabled{color:rgb(191, 217, 214);cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/popover.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:2px;border:1px solid rgb(209, 229, 227);padding:10px;z-index:2000;font-size:12px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-popover .popper__arrow,.el-popover .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popover .popper__arrow{border-width:6px}.el-popover .popper__arrow::after{content:" ";border-width:6px}.el-popover[x-placement^=top]{margin-bottom:12px}.el-popover[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:rgb(209, 229, 227);border-bottom-width:0}.el-popover[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popover[x-placement^=bottom]{margin-top:12px}.el-popover[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:rgb(209, 229, 227)}.el-popover[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popover[x-placement^=right]{margin-left:12px}.el-popover[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:rgb(209, 229, 227);border-left-width:0}.el-popover[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popover[x-placement^=left]{margin-right:12px}.el-popover[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:rgb(209, 229, 227)}.el-popover[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover__title{color:rgb(31, 61, 57);font-size:13px;line-height:1;margin-bottom:9px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/progress.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress{position:relative;line-height:1}.el-progress.is-exception .el-progress-bar__inner{background-color:#ff4949}.el-progress.is-exception .el-progress__text{color:#ff4949}.el-progress.is-success .el-progress-bar__inner{background-color:#13ce66}.el-progress.is-success .el-progress__text{color:#13ce66}.el-progress__text{font-size:14px;color:rgb(72, 106, 103);display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle{display:inline-block}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-ms-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:rgb(228, 241, 241);overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#18c79c;text-align:right;border-radius:100px;line-height:1}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/radio-button.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/radio-button.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/radio-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/radio-group.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/rate.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:rgb(191, 217, 214);transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-ms-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/reset.css: -------------------------------------------------------------------------------- 1 | progress,sub,sup{vertical-align:baseline}button,hr,input{overflow:visible}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#18c79c;text-decoration:none}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;vertical-align:middle}optgroup{font-weight:700}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto;resize:none;vertical-align:top}input,select,textarea{outline:0}[disabled]{cursor:default}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}input::-moz-placeholder,textarea::-moz-placeholder{color:inherit;opacity:.54}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:inherit;opacity:.54}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:inherit;opacity:.54}input::-ms-clear,input::-ms-reveal{display:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}blockquote,figure,form,h1,h2,h3,h4,h5,h6,p{margin:0}dd,dl,li,ol,ul{margin:0;padding:0}ol,ul{list-style:none}body{margin:0;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-weight:400;font-size:14px;color:rgb(31, 61, 57)}a:focus,a:hover{color:rgb(70, 210, 176)}a:active{color:rgb(22, 179, 140)}h1,h2,h3,h4,h5,h6{color:rgb(31, 61, 57);font-weight:inherit}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,h6:last-child,p:last-child{margin-bottom:0}h1{font-size:20px}h2{font-size:18px}h3{font-size:16px}h4,h5,h6,p{font-size:inherit}p{line-height:1.8}sub,sup{font-size:13px}small{font-size:12px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/row.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-row:after,.el-row:before{display:table;content:""}.el-row:after{clear:both}.el-row{position:relative;box-sizing:border-box}.el-row--flex{display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-align-bottom{-ms-flex-align:end;align-items:flex-end}.el-row--flex.is-align-middle{-ms-flex-align:center;align-items:center}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-justify-space-between{-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-end{-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-center{-ms-flex-pack:center;justify-content:center} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/scrollbar.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active .el-scrollbar__bar,.el-scrollbar:focus .el-scrollbar__bar,.el-scrollbar:hover .el-scrollbar__bar{opacity:1;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(151,168,190,.3);transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(151,168,190,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/select-dropdown.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-dropdown{position:absolute;z-index:1001;border:1px solid rgb(209, 229, 227);border-radius:2px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-sizing:border-box;margin:5px 0}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#18c79c;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:rgb(228, 241, 241)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:10px;font-family:element-icons;content:"\E608";font-size:11px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/spinner.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/step.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-step.is-horizontal,.el-step.is-vertical .el-step__head,.el-step.is-vertical .el-step__main,.el-step__line{display:inline-block}.el-step{position:relative;vertical-align:top}.el-step.is-vertical .el-step__main{padding-left:10px}.el-step__line{position:absolute;border-color:inherit;background-color:rgb(191, 217, 214)}.el-step__line.is-vertical{width:2px;box-sizing:border-box;top:32px;bottom:0;left:15px}.el-step__line.is-horizontal{top:15px;height:2px;left:32px;right:0}.el-step__line.is-icon.is-horizontal{right:4px}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:all 150ms;width:0;height:0}.el-step__icon{display:block;line-height:28px}.el-step__icon>*{line-height:inherit;vertical-align:middle}.el-step__head{width:28px;height:28px;border-radius:50%;background-color:transparent;text-align:center;line-height:28px;font-size:28px;vertical-align:top;transition:all 150ms}.el-step__head.is-finish{color:#18c79c;border-color:#18c79c}.el-step__head.is-error{color:#ff4949;border-color:#ff4949}.el-step__head.is-success{color:#13ce66;border-color:#13ce66}.el-step__head.is-process,.el-step__head.is-wait{color:rgb(191, 217, 214);border-color:rgb(191, 217, 214)}.el-step__head.is-text{font-size:14px;border-width:2px;border-style:solid}.el-step__head.is-text.is-finish{color:#fff;background-color:#18c79c;border-color:#18c79c}.el-step__head.is-text.is-error{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-step__head.is-text.is-success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-step__head.is-text.is-wait{color:rgb(191, 217, 214);background-color:#fff;border-color:rgb(191, 217, 214)}.el-step__head.is-text.is-process{color:#fff;background-color:rgb(191, 217, 214);border-color:rgb(191, 217, 214)}.el-step__main{white-space:normal;padding-right:10px;text-align:left}.el-step__title{font-size:14px;line-height:32px;display:inline-block}.el-step__title.is-finish{font-weight:700;color:#18c79c}.el-step__title.is-error{font-weight:700;color:#ff4949}.el-step__title.is-success{font-weight:700;color:#13ce66}.el-step__title.is-wait{font-weight:400;color:rgb(151, 190, 187)}.el-step__title.is-process{font-weight:700;color:rgb(72, 106, 103)}.el-step__description{font-size:12px;font-weight:400;line-height:14px}.el-step__description.is-finish{color:#18c79c}.el-step__description.is-error{color:#ff4949}.el-step__description.is-success{color:#13ce66}.el-step__description.is-wait{color:rgb(191, 217, 214)}.el-step__description.is-process{color:rgb(131, 165, 162)} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/steps.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-steps{font-size:0}.el-steps>:last-child .el-step__line{display:none}.el-steps.is-horizontal{white-space:nowrap}.el-steps.is-horizontal.is-center{text-align:center} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/submenu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/submenu.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/switch.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-switch{display:inline-block;position:relative;font-size:14px;line-height:22px;height:22px;vertical-align:middle}.el-switch__label,.el-switch__label *{position:absolute;font-size:14px;display:inline-block}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-switch.is-disabled .el-switch__core{border-color:rgb(228, 241, 241)!important;background:rgb(228, 241, 241)!important}.el-switch.is-disabled .el-switch__core span{background-color:rgb(250, 254, 253)!important}.el-switch.is-disabled .el-switch__core~.el-switch__label *{color:rgb(250, 254, 253)!important}.el-switch.is-disabled .el-switch__input:checked+.el-switch__core{border-color:rgb(228, 241, 241);background-color:rgb(228, 241, 241)}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{width:46px;height:22px;cursor:pointer}.el-switch__label{transition:.2s;z-index:10;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-switch__label *{line-height:1;top:4px;color:#fff}.el-switch__label--left i{left:6px}.el-switch__label--right i{right:6px}.el-switch__input{display:none}.el-switch__input:checked+.el-switch__core{border-color:#18c79c;background-color:#18c79c}.el-switch__core{margin:0;display:inline-block;position:relative;border:1px solid rgb(191, 217, 214);outline:0;border-radius:12px;box-sizing:border-box;background:rgb(191, 217, 214);transition:border-color .3s,background-color .3s}.el-switch__core .el-switch__button{top:0;left:0;position:absolute;border-radius:100%;transition:transform .3s;width:16px;height:16px;z-index:20;background-color:#fff}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/tab-pane.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/theme/theme-green/tab-pane.css -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/tag.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tag{background-color:rgb(131, 165, 162);display:inline-block;padding:0 5px;height:24px;line-height:22px;font-size:12px;color:#fff;border-radius:4px;box-sizing:border-box;border:1px solid transparent;white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;-ms-transform:scale(.75,.75);transform:scale(.75,.75);height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-2px}.el-tag .el-icon-close:hover{background-color:#fff;color:rgb(131, 165, 162)}.el-tag--gray{background-color:rgb(228, 241, 241);border-color:rgb(228, 241, 241);color:rgb(72, 106, 103)}.el-tag--gray .el-tag__close:hover{background-color:rgb(72, 106, 103);color:#fff}.el-tag--gray.is-hit{border-color:rgb(72, 106, 103)}.el-tag--primary{background-color:rgba(32,160,255,.1);border-color:rgba(32,160,255,.2);color:#18c79c}.el-tag--primary .el-tag__close:hover{background-color:#18c79c;color:#fff}.el-tag--primary.is-hit{border-color:#18c79c}.el-tag--success{background-color:rgba(18,206,102,.1);border-color:rgba(18,206,102,.2);color:#13ce66}.el-tag--success .el-tag__close:hover{background-color:#13ce66;color:#fff}.el-tag--success.is-hit{border-color:#13ce66}.el-tag--warning{background-color:rgba(247,186,41,.1);border-color:rgba(247,186,41,.2);color:#f7ba2a}.el-tag--warning .el-tag__close:hover{background-color:#f7ba2a;color:#fff}.el-tag--warning.is-hit{border-color:#f7ba2a}.el-tag--danger{background-color:rgba(255,73,73,.1);border-color:rgba(255,73,73,.2);color:#ff4949}.el-tag--danger .el-tag__close:hover{background-color:#ff4949;color:#fff}.el-tag--danger.is-hit{border-color:#ff4949} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/tooltip.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:rgb(31, 61, 57);border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:rgb(31, 61, 57);border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:rgb(31, 61, 57)}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:rgb(31, 61, 57)}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:rgb(31, 61, 57);border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:rgb(31, 61, 57);border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:rgb(31, 61, 57)}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light{background:#fff;border:1px solid rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-tooltip__popper.is-dark{background:rgb(31, 61, 57);color:#fff} -------------------------------------------------------------------------------- /codegen-ui/src/assets/theme/theme-green/tree.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tree{cursor:default;background:#fff;border:1px solid rgb(209, 229, 227)}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#5e7382}.el-tree-node{white-space:nowrap}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree-node__expand-icon,.el-tree-node__label,.el-tree-node__loading-icon{display:inline-block;vertical-align:middle}.el-tree-node__content{line-height:36px;height:36px;cursor:pointer}.el-tree-node__content>.el-checkbox,.el-tree-node__content>.el-tree-node__expand-icon{margin-right:8px}.el-tree-node__content>.el-checkbox{vertical-align:middle}.el-tree-node__content:hover{background:rgb(228, 241, 241)}.el-tree-node__expand-icon{cursor:pointer;width:0;height:0;margin-left:10px;border:6px solid transparent;border-right-width:0;border-left-color:rgb(151, 190, 187);border-left-width:7px;-ms-transform:rotate(0);transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon:hover{border-left-color:#999}.el-tree-node__expand-icon.expanded{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{border-color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:4px;font-size:14px;color:rgb(151, 190, 187)}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:rgb(237, 251, 247)} -------------------------------------------------------------------------------- /codegen-ui/src/assets/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/assets/user.png -------------------------------------------------------------------------------- /codegen-ui/src/common/js/util.js: -------------------------------------------------------------------------------- 1 | var SIGN_REGEXP = /([yMdhsm])(\1*)/g; 2 | var DEFAULT_PATTERN = 'yyyy-MM-dd'; 3 | function padding(s, len) { 4 | var len = len - (s + '').length; 5 | for (var i = 0; i < len; i++) { s = '0' + s; } 6 | return s; 7 | }; 8 | 9 | export default { 10 | getQueryStringByName: function (name) { 11 | var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 12 | var r = window.location.search.substr(1).match(reg); 13 | var context = ""; 14 | if (r != null) 15 | context = r[2]; 16 | reg = null; 17 | r = null; 18 | return context == null || context == "" || context == "undefined" ? "" : context; 19 | }, 20 | formatDate: { 21 | 22 | 23 | format: function (date, pattern) { 24 | pattern = pattern || DEFAULT_PATTERN; 25 | return pattern.replace(SIGN_REGEXP, function ($0) { 26 | switch ($0.charAt(0)) { 27 | case 'y': return padding(date.getFullYear(), $0.length); 28 | case 'M': return padding(date.getMonth() + 1, $0.length); 29 | case 'd': return padding(date.getDate(), $0.length); 30 | case 'w': return date.getDay() + 1; 31 | case 'h': return padding(date.getHours(), $0.length); 32 | case 'm': return padding(date.getMinutes(), $0.length); 33 | case 's': return padding(date.getSeconds(), $0.length); 34 | } 35 | }); 36 | }, 37 | parse: function (dateString, pattern) { 38 | var matchs1 = pattern.match(SIGN_REGEXP); 39 | var matchs2 = dateString.match(/(\d)+/g); 40 | if (matchs1.length == matchs2.length) { 41 | var _date = new Date(1970, 0, 1); 42 | for (var i = 0; i < matchs1.length; i++) { 43 | var _int = parseInt(matchs2[i]); 44 | var sign = matchs1[i]; 45 | switch (sign.charAt(0)) { 46 | case 'y': _date.setFullYear(_int); break; 47 | case 'M': _date.setMonth(_int - 1); break; 48 | case 'd': _date.setDate(_int); break; 49 | case 'h': _date.setHours(_int); break; 50 | case 'm': _date.setMinutes(_int); break; 51 | case 's': _date.setSeconds(_int); break; 52 | } 53 | } 54 | return _date; 55 | } 56 | return null; 57 | } 58 | 59 | } 60 | 61 | }; 62 | -------------------------------------------------------------------------------- /codegen-ui/src/components/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/src/components/.gitkeep -------------------------------------------------------------------------------- /codegen-ui/src/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by liumapp on ${DATE} . 3 | * E-mail:liumapp.com@gmail.com 4 | * home-page:http://www.liumapp.com 5 | */ 6 | import babelpolyfill from 'babel-polyfill' 7 | import Vue from 'vue' 8 | import App from './App' 9 | import ElementUI from 'element-ui' 10 | import 'element-ui/lib/theme-default/index.css' 11 | //import './assets/theme/theme-green/index.css' 12 | import VueRouter from 'vue-router' 13 | import store from './vuex/store' 14 | import Vuex from 'vuex' 15 | //import NProgress from 'nprogress' 16 | //import 'nprogress/nprogress.css' 17 | import routes from './routes' 18 | import Mock from './mock' 19 | import vc from 'vue-cookie' 20 | 21 | Mock.bootstrap(); 22 | import 'font-awesome/css/font-awesome.min.css' 23 | import N3Components from 'N3-components' 24 | import 'N3-components/dist/index.min.css' 25 | 26 | Vue.use(N3Components) 27 | Vue.use(ElementUI) 28 | Vue.use(VueRouter) 29 | Vue.use(Vuex) 30 | 31 | //NProgress.configure({ showSpinner: false }); 32 | 33 | const router = new VueRouter({ 34 | routes 35 | }) 36 | // 37 | // router.beforeEach((to, from, next) => { 38 | // //NProgress.start(); 39 | // if (to.path == '/login') { 40 | // sessionStorage.removeItem('user'); 41 | // } 42 | // let user = JSON.parse(sessionStorage.getItem('user')); 43 | // if (!user && to.path != '/login') { 44 | // next({ path: '/login' }) 45 | // } else { 46 | // next() 47 | // } 48 | // }) 49 | 50 | //router.afterEach(transition => { 51 | //NProgress.done(); 52 | //}); 53 | 54 | new Vue({ 55 | //el: '#app', 56 | //template: '', 57 | router, 58 | store, 59 | //components: { App } 60 | render: h => h(App) 61 | }).$mount('#app') 62 | 63 | -------------------------------------------------------------------------------- /codegen-ui/src/mock/data/user.js: -------------------------------------------------------------------------------- 1 | import Mock from 'mockjs'; 2 | const LoginUsers = [ 3 | { 4 | id: 1, 5 | username: 'admin', 6 | password: '123456', 7 | avatar: 'https://raw.githubusercontent.com/taylorchen709/markdown-images/master/vueadmin/user.png', 8 | name: 'BINGTEAM' 9 | } 10 | ]; 11 | 12 | const Users = []; 13 | 14 | for (let i = 0; i < 86; i++) { 15 | Users.push(Mock.mock({ 16 | id: Mock.Random.guid(), 17 | name: Mock.Random.cname(), 18 | addr: Mock.mock('@county(true)'), 19 | 'age|18-60': 1, 20 | birth: Mock.Random.date(), 21 | sex: Mock.Random.integer(0, 1) 22 | })); 23 | } 24 | 25 | export { LoginUsers, Users }; 26 | -------------------------------------------------------------------------------- /codegen-ui/src/mock/index.js: -------------------------------------------------------------------------------- 1 | import mock from './mock'; 2 | 3 | export default mock; 4 | -------------------------------------------------------------------------------- /codegen-ui/src/routes.js: -------------------------------------------------------------------------------- 1 | import Login from './views/Login.vue' 2 | import NotFound from './views/404.vue' 3 | import Home from './views/Home.vue' 4 | import Main from './views/Main.vue' 5 | // import Table from './views/nav1/Table.vue' 6 | import Form from './views/nav1/Form.vue' 7 | import user from './views/nav1/user.vue' 8 | // import Page4 from './views/nav2/Page4.vue' 9 | import Page5 from './views/nav2/Page5.vue' 10 | import Page6 from './views/nav3/Page6.vue' 11 | import echarts from './views/charts/echarts.vue' 12 | 13 | let routes = [ 14 | { 15 | path: '/', 16 | component: Home, 17 | name: 'Code Generate', 18 | iconCls: 'el-icon-message',//图标样式class 19 | children: [ 20 | // { path: '/main', component: Main, name: '主页', hidden: true }, 21 | // { path: '/form', component: Table, name: 'Table' }, 22 | { path: '/codegen', component: Form, name: '全局配置' }, 23 | // { path: '/user', component: user, name: '列表' }, 24 | ] 25 | }, 26 | { 27 | path: '/login', 28 | component: Login, 29 | name: '', 30 | hidden: true 31 | }, 32 | { 33 | path: '/404', 34 | component: NotFound, 35 | name: '', 36 | hidden: true 37 | }, 38 | //{ path: '/main', component: Main }, 39 | 40 | // { 41 | // path: '/', 42 | // component: Home, 43 | // name: '导航二', 44 | // iconCls: 'fa fa-id-card-o', 45 | // children: [ 46 | // { path: '/page4', component: Page4, name: '页面4' }, 47 | // { path: '/page5', component: Page5, name: '页面5' } 48 | // ] 49 | // }, 50 | // { 51 | // path: '/', 52 | // component: Home, 53 | // name: '', 54 | // iconCls: 'fa fa-address-card', 55 | // leaf: true,//只有一个节点 56 | // children: [ 57 | // { path: '/page6', component: Page6, name: '导航三' } 58 | // ] 59 | // }, 60 | // { 61 | // path: '/', 62 | // component: Home, 63 | // name: 'Charts', 64 | // iconCls: 'fa fa-bar-chart', 65 | // children: [ 66 | // { path: '/echarts', component: echarts, name: 'echarts' } 67 | // ] 68 | // }, 69 | { 70 | path: '*', 71 | hidden: true, 72 | redirect: { path: '/404' } 73 | } 74 | ]; 75 | 76 | export default routes; 77 | -------------------------------------------------------------------------------- /codegen-ui/src/styles/vars.scss: -------------------------------------------------------------------------------- 1 | $color-primary: #20a0ff;//#18c79c -------------------------------------------------------------------------------- /codegen-ui/src/views/404.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /codegen-ui/src/views/Main.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /codegen-ui/src/views/nav1/FormTest.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | -------------------------------------------------------------------------------- /codegen-ui/src/views/nav1/user.vue: -------------------------------------------------------------------------------- 1 | 35 | 74 | 75 | 78 | -------------------------------------------------------------------------------- /codegen-ui/src/views/nav2/Page5.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /codegen-ui/src/views/nav3/Page6.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /codegen-ui/src/vuex/actions.js: -------------------------------------------------------------------------------- 1 | //test 2 | export const increment = ({commit}) => { 3 | commit('INCREMENT') 4 | } 5 | export const decrement = ({commit}) => { 6 | commit('DECREMENT') 7 | } 8 | -------------------------------------------------------------------------------- /codegen-ui/src/vuex/getters.js: -------------------------------------------------------------------------------- 1 | //test 2 | export const getCount = state => { 3 | return state.count 4 | } 5 | -------------------------------------------------------------------------------- /codegen-ui/src/vuex/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import * as actions from './actions' 4 | import * as getters from './getters' 5 | 6 | Vue.use(Vuex) 7 | 8 | // 应用初始状态 9 | const state = { 10 | count: 10 11 | } 12 | 13 | // 定义所需的 mutations 14 | const mutations = { 15 | INCREMENT(state) { 16 | state.count++ 17 | }, 18 | DECREMENT(state) { 19 | state.count-- 20 | } 21 | } 22 | 23 | // 创建 store 实例 24 | export default new Vuex.Store({ 25 | actions, 26 | getters, 27 | state, 28 | mutations 29 | }) -------------------------------------------------------------------------------- /codegen-ui/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringCloud/codegen/e229d91ac0f173669826eb848064ade87be8b9d6/codegen-ui/static/.gitkeep -------------------------------------------------------------------------------- /codegen-ui/static/css/default.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Original highlight.js style (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #F0F0F0; 12 | } 13 | 14 | 15 | /* Base color: saturation 0; */ 16 | 17 | .hljs, 18 | .hljs-subst { 19 | color: #444; 20 | } 21 | 22 | .hljs-comment { 23 | color: #888888; 24 | } 25 | 26 | .hljs-keyword, 27 | .hljs-attribute, 28 | .hljs-selector-tag, 29 | .hljs-meta-keyword, 30 | .hljs-doctag, 31 | .hljs-name { 32 | font-weight: bold; 33 | } 34 | 35 | 36 | /* User color: hue: 0 */ 37 | 38 | .hljs-type, 39 | .hljs-string, 40 | .hljs-number, 41 | .hljs-selector-id, 42 | .hljs-selector-class, 43 | .hljs-quote, 44 | .hljs-template-tag, 45 | .hljs-deletion { 46 | color: #880000; 47 | } 48 | 49 | .hljs-title, 50 | .hljs-section { 51 | color: #880000; 52 | font-weight: bold; 53 | } 54 | 55 | .hljs-regexp, 56 | .hljs-symbol, 57 | .hljs-variable, 58 | .hljs-template-variable, 59 | .hljs-link, 60 | .hljs-selector-attr, 61 | .hljs-selector-pseudo { 62 | color: #BC6060; 63 | } 64 | 65 | 66 | /* Language color: hue: 90; */ 67 | 68 | .hljs-literal { 69 | color: #78A960; 70 | } 71 | 72 | .hljs-built_in, 73 | .hljs-bullet, 74 | .hljs-code, 75 | .hljs-addition { 76 | color: #397300; 77 | } 78 | 79 | 80 | /* Meta color: hue: 200 */ 81 | 82 | .hljs-meta { 83 | color: #1f7199; 84 | } 85 | 86 | .hljs-meta-string { 87 | color: #4d99bf; 88 | } 89 | 90 | 91 | /* Misc effects */ 92 | 93 | .hljs-emphasis { 94 | font-style: italic; 95 | } 96 | 97 | .hljs-strong { 98 | font-weight: bold; 99 | } 100 | -------------------------------------------------------------------------------- /codegen-web/src/main/java/cn/springcloud/codegen/SmartCodeGenApplication.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen; 2 | 3 | 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.builder.SpringApplicationBuilder; 6 | 7 | /** 8 | * 代码生成器主程序入口 9 | * @author xujin 10 | */ 11 | @SpringBootApplication 12 | public class SmartCodeGenApplication { 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(SmartCodeGenApplication.class).web(true).run(args); 15 | } 16 | } -------------------------------------------------------------------------------- /codegen-web/src/main/java/cn/springcloud/codegen/config/EnableSwaggerConfig.java: -------------------------------------------------------------------------------- 1 | package cn.springcloud.codegen.config; 2 | 3 | 4 | import org.springframework.beans.factory.annotation.Value; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | import org.springframework.web.servlet.config.annotation.CorsRegistry; 8 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 9 | import springfox.documentation.builders.ApiInfoBuilder; 10 | import springfox.documentation.builders.PathSelectors; 11 | import springfox.documentation.builders.RequestHandlerSelectors; 12 | import springfox.documentation.service.ApiInfo; 13 | import springfox.documentation.service.Contact; 14 | import springfox.documentation.spi.DocumentationType; 15 | import springfox.documentation.spring.web.plugins.Docket; 16 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 17 | 18 | /** 19 | * @author xujin 20 | */ 21 | @Configuration 22 | @EnableSwagger2 23 | public class EnableSwaggerConfig extends WebMvcConfigurerAdapter { 24 | @Value("${spring.application.name}") 25 | private String serviceName; 26 | 27 | @Value("${swagger.service.base.package}") 28 | private String basePackage; 29 | 30 | @Value("${swagger.service.description}") 31 | private String description; 32 | 33 | @Value("${swagger.service.version}") 34 | private String version; 35 | 36 | @Value("${swagger.service.license}") 37 | private String license; 38 | 39 | @Value("${swagger.service.license.url}") 40 | private String licenseUrl; 41 | 42 | @Value("${swagger.service.contact.name}") 43 | private String contactName; 44 | 45 | @Value("${swagger.service.contact.url}") 46 | private String contactUrl; 47 | 48 | @Value("${swagger.service.contact.email}") 49 | private String contactEmail; 50 | 51 | @Bean 52 | public Docket createRestApi() { 53 | return new Docket(DocumentationType.SWAGGER_2) 54 | .apiInfo(apiInfo()) 55 | .select() 56 | // 扫描该包下的所有需要在Swagger中展示的API,@ApiIgnore注解标注的除外 57 | .apis(RequestHandlerSelectors.basePackage(basePackage)) 58 | .paths(PathSelectors.any()) 59 | .build(); 60 | } 61 | 62 | private ApiInfo apiInfo() { 63 | return new ApiInfoBuilder() 64 | .title(serviceName) 65 | .description(description) 66 | .version(version) 67 | .license(license) 68 | .licenseUrl(licenseUrl) 69 | .contact(new Contact(contactName, contactUrl, contactEmail)) 70 | .build(); 71 | } 72 | 73 | // 解决跨域问题 74 | @Override 75 | public void addCorsMappings(CorsRegistry registry) { 76 | registry.addMapping("/**") 77 | .allowedHeaders("*") 78 | .allowedMethods("*") 79 | .allowedOrigins("*"); 80 | } 81 | } -------------------------------------------------------------------------------- /codegen-web/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | # Spring cloud config 2 | spring.application.name=codegen-web 3 | server.port=3333 4 | 5 | # Swagger config 6 | swagger.service.base.package=cn.springcloud.codegen 7 | swagger.service.description=CodeGen 8 | swagger.service.version=1.0.0 9 | swagger.service.license=Apache License 2.0 10 | swagger.service.license.url=http://www.apache.org/licenses/LICENSE-2.0 11 | swagger.service.contact.name=Software_King@qq.com 12 | swagger.service.contact.url=https://github.com/venusteam/codegen 13 | swagger.service.contact.email=Software_King@qq.com -------------------------------------------------------------------------------- /codegen-web/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | skeleton %date %level [%thread] %logger{10} [%file:%line] - %msg%n 8 | UTF-8 9 | 10 | 11 | log/skeleton-%d{yyyy-MM-dd}.%i.log 12 | 50MB 13 | 14 | 15 | INFO 16 | 17 | 18 | true 19 | 20 | 21 | 22 | 0 23 | 512 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | skeleton %date %level [%thread] %logger{10} [%file:%line] - %msg%n 32 | UTF-8 33 | 34 | 35 | 36 | INFO 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | --------------------------------------------------------------------------------