├── README.md ├── java ├── .gitignore ├── database.properties ├── developer.sql ├── pom.xml ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── gomcarter │ │ │ └── developer │ │ │ ├── Application.java │ │ │ ├── Generator.java │ │ │ ├── configuration │ │ │ └── Interceptors.java │ │ │ ├── controller │ │ │ ├── DeveloperCustomInterfacesController.java │ │ │ ├── DeveloperEndController.java │ │ │ ├── DeveloperFavoriteController.java │ │ │ ├── DeveloperFunctionController.java │ │ │ ├── DeveloperInterfacesController.java │ │ │ ├── DeveloperInterfacesPackageController.java │ │ │ ├── DeveloperInterfacesVersionedController.java │ │ │ ├── DeveloperJavaController.java │ │ │ ├── DeveloperMarkController.java │ │ │ ├── DeveloperTestCaseController.java │ │ │ ├── DeveloperTestCaseHistoryController.java │ │ │ ├── DeveloperUserController.java │ │ │ └── DeveloperUserSettingController.java │ │ │ ├── dao │ │ │ ├── CustomInterfacesItemMapper.java │ │ │ ├── CustomInterfacesMapper.java │ │ │ ├── EndAuthMapper.java │ │ │ ├── EndMapper.java │ │ │ ├── FavoriteMapper.java │ │ │ ├── FunctionMapper.java │ │ │ ├── InterfacesMapper.java │ │ │ ├── InterfacesPackageItemMapper.java │ │ │ ├── InterfacesPackageMapper.java │ │ │ ├── InterfacesVersionedMapper.java │ │ │ ├── JavaMapper.java │ │ │ ├── MarkMapper.java │ │ │ ├── SettingOfUserMapper.java │ │ │ ├── TestCaseHistoryMapper.java │ │ │ ├── TestCaseMapper.java │ │ │ └── UserMapper.java │ │ │ ├── dto │ │ │ ├── CustomFunctionDto.java │ │ │ ├── CustomInterfacesDetailDto.java │ │ │ ├── CustomInterfacesItemDto.java │ │ │ ├── CustomInterfacesTopDto.java │ │ │ ├── EndAuthDto.java │ │ │ ├── EndDto.java │ │ │ ├── FavoriteTree.java │ │ │ ├── FunctionDto.java │ │ │ ├── InterfacesDetailDto.java │ │ │ ├── InterfacesDistributionDto.java │ │ │ ├── InterfacesDto.java │ │ │ ├── InterfacesPackageDto.java │ │ │ ├── JavaDto.java │ │ │ ├── MarkDto.java │ │ │ ├── SettingOfUserDto.java │ │ │ ├── TestCaseDto.java │ │ │ ├── TestCaseHistoryDto.java │ │ │ └── UserDto.java │ │ │ ├── entity │ │ │ ├── CustomInterfaces.java │ │ │ ├── CustomInterfacesItem.java │ │ │ ├── End.java │ │ │ ├── EndAuth.java │ │ │ ├── Favorite.java │ │ │ ├── Function.java │ │ │ ├── Interfaces.java │ │ │ ├── InterfacesPackage.java │ │ │ ├── InterfacesPackageItem.java │ │ │ ├── InterfacesVersioned.java │ │ │ ├── Java.java │ │ │ ├── Mark.java │ │ │ ├── SettingOfUser.java │ │ │ ├── TestCase.java │ │ │ ├── TestCaseHistory.java │ │ │ └── User.java │ │ │ ├── holder │ │ │ ├── LoginUser.java │ │ │ └── UserHolder.java │ │ │ ├── interceptors │ │ │ └── UserInterceptor.java │ │ │ ├── params │ │ │ ├── CustomInterfacesItemParam.java │ │ │ ├── CustomInterfacesQueryParam.java │ │ │ ├── Edge.java │ │ │ ├── EndAuthParam.java │ │ │ ├── EndParam.java │ │ │ ├── FavoriteParam.java │ │ │ ├── FunctionParam.java │ │ │ ├── Interface.java │ │ │ ├── InterfacesPackageItemParam.java │ │ │ ├── InterfacesPackageParam.java │ │ │ ├── InterfacesQueryParam.java │ │ │ ├── InterfacesVersionedParam.java │ │ │ ├── JavaQueryParam.java │ │ │ ├── MarkParam.java │ │ │ ├── Node.java │ │ │ ├── SettingOfUserParam.java │ │ │ ├── TestCaseHistoryParam.java │ │ │ ├── TestCaseHistoryQueryParam.java │ │ │ ├── TestCaseParam.java │ │ │ ├── TestCaseQueryParam.java │ │ │ ├── UserParam.java │ │ │ ├── Workflow.java │ │ │ └── Xhr.java │ │ │ ├── publics │ │ │ ├── PublicsGatewayController.java │ │ │ ├── PublicsInterfacesController.java │ │ │ ├── PublicsMockController.java │ │ │ ├── PublicsUserController.java │ │ │ └── PublicsXhrController.java │ │ │ ├── service │ │ │ ├── CustomInterfacesItemService.java │ │ │ ├── CustomInterfacesService.java │ │ │ ├── EndAuthService.java │ │ │ ├── EndService.java │ │ │ ├── FavoriteService.java │ │ │ ├── FunctionService.java │ │ │ ├── InterfacesPackageItemService.java │ │ │ ├── InterfacesPackageService.java │ │ │ ├── InterfacesService.java │ │ │ ├── InterfacesVersionedService.java │ │ │ ├── JavaService.java │ │ │ ├── MarkService.java │ │ │ ├── SettingOfUserService.java │ │ │ ├── TestCaseHistoryService.java │ │ │ ├── TestCaseService.java │ │ │ └── UserService.java │ │ │ └── utils │ │ │ ├── DefaultResponseHandler.java │ │ │ ├── Pair.java │ │ │ └── PasswordUtils.java │ │ └── resources │ │ ├── logback.xml │ │ ├── mybatis │ │ ├── CustomInterfacesItemMapper.xml │ │ ├── CustomInterfacesMapper.xml │ │ ├── EndAuthMapper.xml │ │ ├── EndMapper.xml │ │ ├── FavoriteMapper.xml │ │ ├── FunctionMapper.xml │ │ ├── InterfacesMapper.xml │ │ ├── InterfacesPackageItemMapper.xml │ │ ├── InterfacesPackageMapper.xml │ │ ├── InterfacesVersionedMapper.xml │ │ ├── JavaMapper.xml │ │ ├── MarkMapper.xml │ │ ├── SettingOfUserMapper.xml │ │ ├── TestCaseHistoryMapper.xml │ │ ├── TestCaseMapper.xml │ │ └── UserMapper.xml │ │ └── static │ │ ├── favicon.ico │ │ ├── index.html │ │ └── static │ │ ├── css │ │ ├── app.1fe03e7c80cb3d9443f7110749043791.css │ │ └── app.1fe03e7c80cb3d9443f7110749043791.css.map │ │ ├── fonts │ │ ├── element-icons.535877f.woff │ │ └── element-icons.732389d.ttf │ │ ├── img │ │ ├── bg.129e18e.png │ │ └── logo.8cab05f.png │ │ └── js │ │ ├── 0.8464d9272a172aada417.js │ │ ├── 0.8464d9272a172aada417.js.map │ │ ├── 1.c60c89b4b7a393e4a1d0.js │ │ ├── 1.c60c89b4b7a393e4a1d0.js.map │ │ ├── 10.18c7c0838cd3900d4b16.js │ │ ├── 10.18c7c0838cd3900d4b16.js.map │ │ ├── 11.9c7addf8992f5ffeaba1.js │ │ ├── 11.9c7addf8992f5ffeaba1.js.map │ │ ├── 12.f67f61eecdabb93c50e1.js │ │ ├── 12.f67f61eecdabb93c50e1.js.map │ │ ├── 13.d5adfc14092962bd7c58.js │ │ ├── 13.d5adfc14092962bd7c58.js.map │ │ ├── 14.12c9106727385c05e287.js │ │ ├── 14.12c9106727385c05e287.js.map │ │ ├── 15.cdaa0179a072a14a6086.js │ │ ├── 15.cdaa0179a072a14a6086.js.map │ │ ├── 16.8dc577cc9f4fba15b626.js │ │ ├── 16.8dc577cc9f4fba15b626.js.map │ │ ├── 17.2095f5eb661f487e6013.js │ │ ├── 17.2095f5eb661f487e6013.js.map │ │ ├── 18.78cec5343dec8b7d966e.js │ │ ├── 18.78cec5343dec8b7d966e.js.map │ │ ├── 19.aa2ac5d14ba2044c3f28.js │ │ ├── 19.aa2ac5d14ba2044c3f28.js.map │ │ ├── 2.e0a6b6b33a825e9035b3.js │ │ ├── 2.e0a6b6b33a825e9035b3.js.map │ │ ├── 20.0a0dbd9e887fa4f0b8d7.js │ │ ├── 20.0a0dbd9e887fa4f0b8d7.js.map │ │ ├── 21.a87a74c11d18ed07f951.js │ │ ├── 21.a87a74c11d18ed07f951.js.map │ │ ├── 22.0bb2356d936198667870.js │ │ ├── 22.0bb2356d936198667870.js.map │ │ ├── 23.e3fd5e8a101d190848e8.js │ │ ├── 23.e3fd5e8a101d190848e8.js.map │ │ ├── 24.ed30e718352e619ce964.js │ │ ├── 24.ed30e718352e619ce964.js.map │ │ ├── 25.cbb1775880e64b051d68.js │ │ ├── 25.cbb1775880e64b051d68.js.map │ │ ├── 26.f783d01b2450e40dfe86.js │ │ ├── 26.f783d01b2450e40dfe86.js.map │ │ ├── 27.be51282c4f6c1de71cfe.js │ │ ├── 27.be51282c4f6c1de71cfe.js.map │ │ ├── 3.ef4db01f2ed7e61341ea.js │ │ ├── 3.ef4db01f2ed7e61341ea.js.map │ │ ├── 30.ec8a4eb2c95329395f8f.js │ │ ├── 30.ec8a4eb2c95329395f8f.js.map │ │ ├── 31.c830f4d0bc41e35c5912.js │ │ ├── 31.c830f4d0bc41e35c5912.js.map │ │ ├── 32.ee02dff6ff1426005362.js │ │ ├── 32.ee02dff6ff1426005362.js.map │ │ ├── 33.6050c7532d0c3418ccda.js │ │ ├── 33.6050c7532d0c3418ccda.js.map │ │ ├── 34.45d8ca1ec5b66adfb121.js │ │ ├── 34.45d8ca1ec5b66adfb121.js.map │ │ ├── 35.31a3c801df3b1e3fcaba.js │ │ ├── 35.31a3c801df3b1e3fcaba.js.map │ │ ├── 36.1d079b9b27dda8d74a14.js │ │ ├── 36.1d079b9b27dda8d74a14.js.map │ │ ├── 37.b74402f3916ee6252e9d.js │ │ ├── 37.b74402f3916ee6252e9d.js.map │ │ ├── 38.98e617e77941a3fe19ae.js │ │ ├── 38.98e617e77941a3fe19ae.js.map │ │ ├── 39.ef613ee9ed7dad6aa9b4.js │ │ ├── 39.ef613ee9ed7dad6aa9b4.js.map │ │ ├── 4.1b71d20be549f2c4a3c9.js │ │ ├── 4.1b71d20be549f2c4a3c9.js.map │ │ ├── 40.5be9c32bcd7b91e12078.js │ │ ├── 40.5be9c32bcd7b91e12078.js.map │ │ ├── 41.4b0a71e6037ffc5cc6b8.js │ │ ├── 41.4b0a71e6037ffc5cc6b8.js.map │ │ ├── 42.ea99b3c6b8b37a61ecc9.js │ │ ├── 42.ea99b3c6b8b37a61ecc9.js.map │ │ ├── 43.6988cdffea70b18e4d71.js │ │ ├── 43.6988cdffea70b18e4d71.js.map │ │ ├── 44.60d2b7a17c830cdf0d78.js │ │ ├── 44.60d2b7a17c830cdf0d78.js.map │ │ ├── 45.4ae5fab958b9eab76510.js │ │ ├── 45.4ae5fab958b9eab76510.js.map │ │ ├── 46.5fcccc975feda255736e.js │ │ ├── 46.5fcccc975feda255736e.js.map │ │ ├── 47.d66676e081a19695c3cc.js │ │ ├── 47.d66676e081a19695c3cc.js.map │ │ ├── 5.a370913f15ef8f3a4570.js │ │ ├── 5.a370913f15ef8f3a4570.js.map │ │ ├── 6.400cad08d711b76bb25c.js │ │ ├── 6.400cad08d711b76bb25c.js.map │ │ ├── 7.721fc6a382133787f034.js │ │ ├── 7.721fc6a382133787f034.js.map │ │ ├── 8.6f6d16cfb0c37c913526.js │ │ ├── 8.6f6d16cfb0c37c913526.js.map │ │ ├── 9.16a592ea3bb2a92103b9.js │ │ ├── 9.16a592ea3bb2a92103b9.js.map │ │ ├── app.97488bca2d11df67c0e9.js │ │ ├── app.97488bca2d11df67c0e9.js.map │ │ ├── manifest.a87ede5bbd71abf9bf31.js │ │ ├── manifest.a87ede5bbd71abf9bf31.js.map │ │ ├── vendor.5a38fd741c6938a245fe.js │ │ └── vendor.5a38fd741c6938a245fe.js.map └── startup.sh ├── src └── main │ └── webapp │ └── .DS_Store └── web ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── README.md ├── build ├── build.js ├── check-versions.js ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── favicon.ico ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── assets │ ├── css │ │ ├── animate.css │ │ ├── common.scss │ │ └── mixin.scss │ ├── font_icons │ │ ├── fonts.css │ │ ├── fonts.png │ │ └── fonts │ │ │ ├── icomoon.eot │ │ │ ├── icomoon.svg │ │ │ ├── icomoon.ttf │ │ │ └── icomoon.woff │ └── img │ │ ├── bg.png │ │ ├── logo.jpg │ │ ├── logo.png │ │ ├── qa.png │ │ └── upload.png ├── components │ ├── aggregation-editor │ │ ├── index.scss │ │ └── index.vue │ ├── condition-editor │ │ ├── index.scss │ │ └── index.vue │ ├── datagrid │ │ ├── index.scss │ │ └── index.vue │ ├── dialog │ │ ├── index.scss │ │ └── index.vue │ ├── frame │ │ ├── index.scss │ │ └── index.vue │ ├── image │ │ ├── big.vue │ │ └── index.vue │ ├── interfaces-selector │ │ ├── index.scss │ │ └── index.vue │ ├── json-editor │ │ ├── index.scss │ │ └── index.vue │ ├── jsonformatter │ │ ├── index.scss │ │ └── index.vue │ ├── node-editor │ │ ├── index.scss │ │ └── index.vue │ ├── pager │ │ ├── index.scss │ │ └── index.vue │ ├── parameter-input │ │ ├── index.scss │ │ └── index.vue │ ├── parameter │ │ ├── index.scss │ │ └── index.vue │ ├── runner │ │ ├── index.scss │ │ └── index.vue │ ├── selector │ │ ├── index.scss │ │ └── index.vue │ ├── table-editor │ │ ├── index.scss │ │ └── index.vue │ ├── table-output-editor │ │ ├── index.scss │ │ └── index.vue │ ├── table-selector │ │ ├── index.scss │ │ └── index.vue │ ├── tree │ │ ├── index.scss │ │ └── index.vue │ └── workflow │ │ ├── index.scss │ │ └── index.vue ├── config │ ├── G6.js │ ├── api │ │ ├── data-api.js │ │ ├── env.js │ │ ├── http.js │ │ └── inserv-api.js │ ├── cache.js │ ├── cookie.js │ ├── login.js │ ├── mapping.js │ ├── rules.js │ ├── trace.js │ └── utils.js ├── main.js ├── page │ ├── consumer │ │ ├── edit │ │ │ ├── index.scss │ │ │ └── index.vue │ │ └── list │ │ │ ├── index.scss │ │ │ └── index.vue │ ├── flow │ │ ├── function │ │ │ ├── edit │ │ │ │ ├── index.scss │ │ │ │ └── index.vue │ │ │ ├── index.scss │ │ │ └── index.vue │ │ ├── testCase │ │ │ ├── edit │ │ │ │ ├── index.scss │ │ │ │ └── index.vue │ │ │ ├── history │ │ │ │ ├── detail │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.vue │ │ │ │ ├── index.scss │ │ │ │ └── index.vue │ │ │ ├── index.scss │ │ │ ├── index.vue │ │ │ └── run │ │ │ │ ├── index.scss │ │ │ │ └── index.vue │ │ └── testapi │ │ │ ├── index.scss │ │ │ ├── index.vue │ │ │ └── run │ │ │ ├── index.scss │ │ │ └── index.vue │ ├── index │ │ ├── index.scss │ │ └── index.vue │ ├── interfaces │ │ ├── customer │ │ │ ├── index.scss │ │ │ └── index.vue │ │ ├── edit │ │ │ ├── index.scss │ │ │ └── index.vue │ │ ├── index.scss │ │ ├── index.vue │ │ └── view │ │ │ ├── index.scss │ │ │ └── index.vue │ ├── login │ │ ├── index.scss │ │ └── index.vue │ ├── package │ │ ├── index.scss │ │ ├── index.vue │ │ └── view │ │ │ ├── index.scss │ │ │ └── index.vue │ ├── provider │ │ ├── edit │ │ │ ├── index.scss │ │ │ └── index.vue │ │ └── list │ │ │ ├── index.scss │ │ │ └── index.vue │ ├── sample │ │ ├── index.scss │ │ └── index.vue │ ├── system │ │ └── user │ │ │ ├── edit │ │ │ ├── index.scss │ │ │ └── index.vue │ │ │ ├── index.scss │ │ │ └── index.vue │ ├── test │ │ ├── index.scss │ │ └── index.vue │ └── transfer │ │ ├── index.scss │ │ └── index.vue ├── router │ └── index.js └── store │ └── store.js └── static └── .gitkeep /README.md: -------------------------------------------------------------------------------- 1 | ## 写在前面 2 | 3 | 本工具是在spring(java 1.8)系列下,自动拉取接口并生成接口文档,在此基础之上构建了单接口测试、接口流程自动化测试、mock数据自动生成。 4 | 国内用户可访问:https://gitee.com/gomcarter/developer 5 | 6 | ## 简介 7 | ![image](https://user-images.githubusercontent.com/16378826/98345026-0f87df00-204f-11eb-9bd0-9b04540af6f7.png) 8 | 9 | 启动某个spring服务端项目,将该项目的接口发送到developer中进行管理,在developer系统中提供各种关于接口的功能。 10 | 11 | ## 工作原理 12 | 1,通过RequestMappingHandlerMapping获取到所有接口列表; 13 | 14 | 2,通过获取到的接口解析该接口的参数、返回值等数据结构; 15 | 16 | 3,最后将接口相关数据结构通过http发送到developer系统; 17 | 18 | ## 使用步骤 19 | 20 | ### 1,安装部署 21 | 22 | ### 2,接口管理 23 | 24 | ### 3,接口打包管理 25 | 26 | ### 4,接口mock 27 | 28 | ### 5,单接口测试 29 | 30 | ### 6,接口自动化测试 31 | 32 | ### 7,微服务接口自动聚合 33 | 34 | ## 五、帮助 35 | 36 | 如需帮助请联系:gomcarter@vip.qq.com 37 | 38 | 加Q群 : 783287193 39 | 40 | 欢迎提issue和需求! 41 | -------------------------------------------------------------------------------- /java/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | logs/ 4 | ~/ 5 | !**/src/main/** 6 | !**/src/test/** 7 | **/.DS_Store 8 | 9 | ### STS ### 10 | .apt_generated 11 | .classpath 12 | .factorypath 13 | .project 14 | .settings 15 | .springBeans 16 | .sts4-cache 17 | 18 | ### IntelliJ IDEA ### 19 | .idea 20 | *.iws 21 | *.iml 22 | *.ipr 23 | 24 | ### NetBeans ### 25 | /nbproject/private/ 26 | /nbbuild/ 27 | /dist/ 28 | /nbdist/ 29 | /.nb-gradle/ 30 | build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /java/database.properties: -------------------------------------------------------------------------------- 1 | #主库配置 2 | write.jdbc.url=jdbc:mysql://dburl/developer?useUnicode=true&characterEncoding=utf8&failOverReadOnly=false&useSSL=false&serverTimezone=UTC 3 | write.jdbc.user=username 4 | write.jdbc.password=password 5 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/Application.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer; 2 | 3 | import com.gomcarter.frameworks.mybatis.annotation.EnableMybatis; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | /** 8 | * 程序主入口 9 | * 10 | * @author gomcarter 11 | */ 12 | @SpringBootApplication 13 | @EnableMybatis("./database.properties") 14 | public class Application { 15 | 16 | public static void main(String[] args) { 17 | SpringApplication.run(Application.class, args); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/Generator.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer; 2 | 3 | 4 | import com.gomcarter.frameworks.mybatis.tools.CodeGenerator; 5 | 6 | /** 7 | * 代码自动生成 8 | * 9 | * @author 李银 on 2019-09-02 22:02:08 10 | */ 11 | public class Generator { 12 | 13 | public static void main(String[] args) { 14 | /* 15 | * 项目绝对路径,如果不填写则为当前项目地址 classpath 16 | */ 17 | CodeGenerator.PROJECT_ABSOLUTE_DIR = null; 18 | /* 19 | * 生成代码输出的初始包路径 20 | */ 21 | CodeGenerator.BASE_PACKAGE = Generator.class.getPackage().getName(); 22 | /* 23 | * 生成代码输出的初始包路径下的子目录,自定义 24 | * 如:abc, 那么文件就输出到 com.gomcarter.test.abc下 25 | */ 26 | CodeGenerator.SUB_PACKAGE = ""; 27 | /* 28 | * 数据库连接地址 29 | */ 30 | CodeGenerator.DB_URL = "jdbcurl"; 31 | /* 32 | * 数据库用户 33 | */ 34 | CodeGenerator.DB_USERNAME = "user"; 35 | /* 36 | * 数据库密码 37 | */ 38 | CodeGenerator.DB_PASSWORD = "password"; 39 | /* 40 | * 表名, 为空会则生成整个数据库的所有表 41 | */ 42 | CodeGenerator.TOBE_GENERATE_TABLES = ""; 43 | /* 44 | * 作者信息 45 | */ 46 | CodeGenerator.AUTHOR = "gomcarter"; 47 | 48 | // 添加数据库字段映射成 java 类 49 | // CodeGenerator.addTypeMapping("", Integer.class); 50 | 51 | // 开始执行 52 | CodeGenerator.main(null); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/configuration/Interceptors.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.configuration; 2 | 3 | import com.gomcarter.developer.interceptors.UserInterceptor; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 7 | 8 | /** 9 | * 拦截器配置 10 | * 11 | * @author gomcarter on 2018年3月29日 16:29:58 12 | */ 13 | @Configuration 14 | public class Interceptors implements WebMvcConfigurer { 15 | 16 | @Override 17 | public void addInterceptors(InterceptorRegistry registry) { 18 | //添加认证拦截器 19 | registry.addInterceptor(new UserInterceptor()).addPathPatterns("/developer/**"); 20 | 21 | //添加更多的拦截器 22 | //... 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/controller/DeveloperFavoriteController.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.controller; 2 | 3 | import com.gomcarter.developer.dto.FavoriteTree; 4 | import com.gomcarter.developer.entity.Favorite; 5 | import com.gomcarter.developer.holder.UserHolder; 6 | import com.gomcarter.developer.service.FavoriteService; 7 | import org.springframework.web.bind.annotation.*; 8 | 9 | import javax.annotation.Resource; 10 | import java.util.List; 11 | 12 | /** 13 | * @author 李银 on 2020-07-30 09:37:40 14 | */ 15 | @RestController 16 | @RequestMapping("developer/favorite") 17 | public class DeveloperFavoriteController { 18 | 19 | @Resource 20 | private FavoriteService favoriteService; 21 | 22 | @GetMapping(value = "tree", name = "获取收藏夹树") 23 | List tree() { 24 | return favoriteService.tree(UserHolder.username()); 25 | } 26 | 27 | @PutMapping(value = "{id}", name = "修改收藏夹信息") 28 | public void updateName(@PathVariable("id") Long id, @RequestParam("name") String name) { 29 | favoriteService.updateName(id, name, UserHolder.username()); 30 | } 31 | 32 | @PutMapping(value = "sort/{id}", name = "修改收藏夹排序") 33 | public void updateSort(@PathVariable("id") Long id, @RequestParam("sort") Integer sort) { 34 | favoriteService.updateSort(id, sort, UserHolder.username()); 35 | } 36 | 37 | @PostMapping(value = "", name = "添加收藏夹") 38 | public FavoriteTree create(Long parentId, @RequestParam("name") String name) { 39 | Favorite favorite = this.favoriteService.create(parentId, name, UserHolder.username()); 40 | return new FavoriteTree() 41 | .setId(favorite.getId()) 42 | .setText(favorite.getName()) 43 | .setIsLeaf(favorite.getIsLeaf()) 44 | .setCode(favorite.getCode()) 45 | .setParentId(favorite.getFkFavoriteId()); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/controller/DeveloperInterfacesController.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.controller; 2 | 3 | import com.gomcarter.developer.dto.InterfacesDetailDto; 4 | import com.gomcarter.developer.dto.InterfacesDistributionDto; 5 | import com.gomcarter.developer.params.InterfacesQueryParam; 6 | import com.gomcarter.developer.service.InterfacesService; 7 | import com.gomcarter.frameworks.base.common.CustomStringUtils; 8 | import com.gomcarter.frameworks.base.pager.DefaultPager; 9 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 10 | import org.springframework.web.bind.annotation.*; 11 | 12 | import javax.annotation.Resource; 13 | import java.util.List; 14 | 15 | /** 16 | * @author gomcarter 17 | */ 18 | @RestController 19 | @RequestMapping("developer/interfaces") 20 | public class DeveloperInterfacesController { 21 | 22 | @Resource 23 | InterfacesService interfacesService; 24 | 25 | @DeleteMapping(value = "{id}", name = "作废接口") 26 | void delete(@PathVariable("id") Long id) { 27 | this.interfacesService.delete(id); 28 | } 29 | 30 | @DeleteMapping(value = "batch", name = "批量作废接口") 31 | void batchDelete(@RequestParam("idList") List idList) { 32 | this.interfacesService.delete(idList); 33 | } 34 | 35 | @GetMapping(value = "simple/list", name = "获取接口地址列表") 36 | List simpleList(@Notes("查询参数") InterfacesQueryParam params, @Notes("分页器") DefaultPager pager) { 37 | Long id = CustomStringUtils.parseLong(params.getName()); 38 | if (id != null) { 39 | params.setName(null) 40 | .setId(id); 41 | } 42 | return interfacesService.list(params, pager); 43 | } 44 | 45 | @GetMapping(value = "list", name = "获取接口地址列表") 46 | List list(@Notes("查询参数") InterfacesQueryParam params, @Notes("分页器") DefaultPager pager) { 47 | return this.interfacesService.list(params, pager); 48 | } 49 | 50 | @GetMapping(value = "{id}", name = "获取接口详情") 51 | InterfacesDetailDto detail(@Notes("查询参数") @PathVariable Long id) { 52 | return this.interfacesService.detail(id); 53 | } 54 | 55 | @GetMapping(value = "count", name = "获取接口地址列表总数") 56 | Integer count(@Notes("查询参数") InterfacesQueryParam params) { 57 | return interfacesService.count(params); 58 | } 59 | 60 | @GetMapping(value = "distribution", name = "获取接口分布") 61 | List distributions() { 62 | return interfacesService.getDistributions(); 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/controller/DeveloperMarkController.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.controller; 2 | 3 | import com.gomcarter.developer.dto.MarkDto; 4 | import com.gomcarter.developer.holder.UserHolder; 5 | import com.gomcarter.developer.params.MarkParam; 6 | import com.gomcarter.developer.service.MarkService; 7 | import com.gomcarter.frameworks.base.pager.DefaultPager; 8 | import org.springframework.web.bind.annotation.*; 9 | 10 | import javax.annotation.Resource; 11 | import java.util.List; 12 | import java.util.stream.Collectors; 13 | 14 | /** 15 | * @author gomcarter on 2020-02-10 16:05:03 16 | */ 17 | @RestController 18 | @RequestMapping("developer/mark") 19 | public class DeveloperMarkController { 20 | 21 | @Resource 22 | private MarkService markService; 23 | 24 | @GetMapping(value = "/{interfaceId}", name = "通过接口id获取备注列表") 25 | List list(@PathVariable("interfaceId") Long interfaceId) { 26 | return this.markService.query(new MarkParam().setFkInterfacesId(interfaceId), new DefaultPager(Integer.MAX_VALUE, 1)) 27 | .stream() 28 | .map(s -> new MarkDto() 29 | .setId(s.getId()) 30 | .setUser(s.getUser()) 31 | .setMark(s.getMark()) 32 | .setCreateTime(s.getCreateTime()) 33 | ) 34 | .collect(Collectors.toList()); 35 | } 36 | 37 | @PostMapping(value = "/{interfaceId}", name = "给接口id新增取备") 38 | void add(@PathVariable("interfaceId") Long interfaceId, @RequestParam String mark) { 39 | this.markService.create(interfaceId, UserHolder.name(), mark); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/controller/DeveloperUserSettingController.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.controller; 2 | 3 | import com.gomcarter.developer.dto.SettingOfUserDto; 4 | import com.gomcarter.developer.holder.UserHolder; 5 | import com.gomcarter.developer.service.SettingOfUserService; 6 | import com.gomcarter.frameworks.base.common.AssertUtils; 7 | import com.gomcarter.frameworks.base.exception.CustomException; 8 | import org.springframework.web.bind.annotation.GetMapping; 9 | import org.springframework.web.bind.annotation.PutMapping; 10 | import org.springframework.web.bind.annotation.RequestMapping; 11 | import org.springframework.web.bind.annotation.RestController; 12 | 13 | import javax.annotation.Resource; 14 | import java.util.Optional; 15 | 16 | /** 17 | * @author gomcarter 18 | */ 19 | @RestController 20 | @RequestMapping("developer/user/setting") 21 | public class DeveloperUserSettingController { 22 | 23 | @Resource 24 | private SettingOfUserService settingOfUserService; 25 | 26 | @PutMapping(value = "", name = "开启或者关闭第三方登录功能") 27 | void update(boolean remote, String url) { 28 | AssertUtils.isTrue(UserHolder.admin(), new CustomException("没有权限")); 29 | 30 | this.settingOfUserService.update(remote, url); 31 | } 32 | 33 | @GetMapping(value = "", name = "获取配置信息") 34 | SettingOfUserDto get() { 35 | return Optional.ofNullable(this.settingOfUserService.get()) 36 | .map(s -> new SettingOfUserDto() 37 | .setUrl(s.getUrl()) 38 | .setRemote(s.getRemote()) 39 | ) 40 | .orElse(new SettingOfUserDto()); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/CustomInterfacesItemMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.CustomInterfacesItem; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author 李银 on 2020-08-20 18:09:06 8 | */ 9 | public interface CustomInterfacesItemMapper extends BaseMapper { 10 | } 11 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/CustomInterfacesMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.dto.CustomInterfacesDetailDto; 4 | import com.gomcarter.developer.dto.CustomInterfacesTopDto; 5 | import com.gomcarter.developer.entity.CustomInterfaces; 6 | import com.gomcarter.developer.params.CustomInterfacesQueryParam; 7 | import com.gomcarter.frameworks.base.pager.Pageable; 8 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 9 | import org.apache.ibatis.annotations.Param; 10 | 11 | import java.util.List; 12 | 13 | 14 | public interface CustomInterfacesMapper extends BaseMapper { 15 | 16 | CustomInterfaces getByInterfacesId(@Param("interfacesId") Long interfacesId, @Param("username") String username); 17 | 18 | List getList(@Param("param") CustomInterfacesQueryParam param, @Param("pager") Pageable pager); 19 | 20 | Integer getCount(@Param("param") CustomInterfacesQueryParam param); 21 | 22 | List getFavoritesIdList(@Param("interfacesIdList") List interfacesIdList, @Param("username") String username); 23 | 24 | List queryTop(); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/EndAuthMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.EndAuth; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author gomcarter on 2019-06-17 16:41:01 8 | */ 9 | public interface EndAuthMapper extends BaseMapper { 10 | } 11 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/EndMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.End; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author gomcarter on 2019-06-17 16:41:01 8 | */ 9 | public interface EndMapper extends BaseMapper { 10 | 11 | End getByPrefix(String prefix); 12 | } 13 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/FavoriteMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.Favorite; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author 李银 on 2020-07-30 09:37:40 11 | */ 12 | public interface FavoriteMapper extends BaseMapper { 13 | 14 | List getByOwner(@Param("owner") String owner); 15 | 16 | Favorite queryByParentIdAndName(@Param("parentId") Long parentId, 17 | @Param("name") String name, 18 | @Param("favoriteId") Long favoriteId); 19 | 20 | /** 21 | * 根据父ID获取子分类最大的code 22 | * 23 | * @param parentId 24 | * @return 25 | */ 26 | String getMaxCode(@Param("parentId") Long parentId, @Param("owner") String owner); 27 | 28 | /** 29 | * 更新排序 30 | */ 31 | void updateSort(@Param("parentId") Long parentId, 32 | @Param("owner") String owner, 33 | @Param("min") Integer min, 34 | @Param("max") Integer max, 35 | @Param("index") Integer index); 36 | } 37 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/FunctionMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.Function; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author gomcarter on 2020-01-06 10:09:59 8 | */ 9 | public interface FunctionMapper extends BaseMapper { 10 | } 11 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/InterfacesMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.dto.InterfacesDistributionDto; 4 | import com.gomcarter.developer.entity.Interfaces; 5 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 12 | * @author gomcarter on 2019-06-17 16:41:01 13 | */ 14 | public interface InterfacesMapper extends BaseMapper { 15 | 16 | Interfaces getByHash(@Param("hash") String hash); 17 | 18 | Interfaces getByUrl(@Param("javaId") Long javaId, @Param("url") String url, @Param("method") String method); 19 | 20 | void setDeprecatedByJavaId(@Param("javaId") Long javaId); 21 | 22 | List queryInterfacesDistributions(); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/InterfacesPackageItemMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.InterfacesPackageItem; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author gomcarter on 2020-03-06 14:08:36 11 | */ 12 | public interface InterfacesPackageItemMapper extends BaseMapper { 13 | 14 | void batchInsert(@Param("packageId") Long packageId, @Param("interfacesIdList") List interfacesIdList); 15 | 16 | void deleteByPackageId(@Param("packageId") Long packageId); 17 | } 18 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/InterfacesPackageMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.InterfacesPackage; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author gomcarter on 2020-03-06 14:08:14 8 | */ 9 | public interface InterfacesPackageMapper extends BaseMapper { 10 | } 11 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/InterfacesVersionedMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.InterfacesVersioned; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | /** 8 | * @author gomcarter on 2019-12-13 11:24:57 9 | */ 10 | public interface InterfacesVersionedMapper extends BaseMapper { 11 | 12 | InterfacesVersioned getByHash(@Param("hash") String hash); 13 | } 14 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/JavaMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.Java; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author gomcarter on 2019-06-17 16:41:01 8 | */ 9 | public interface JavaMapper extends BaseMapper { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/MarkMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.Mark; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author gomcarter on 2020-02-10 16:05:03 8 | */ 9 | public interface MarkMapper extends BaseMapper { 10 | } 11 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/SettingOfUserMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.SettingOfUser; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author gomcarter on 2020-03-02 10:29:14 8 | */ 9 | public interface SettingOfUserMapper extends BaseMapper { 10 | } 11 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/TestCaseHistoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.TestCaseHistory; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author 李银 on 2020-07-17 21:35:29 8 | */ 9 | public interface TestCaseHistoryMapper extends BaseMapper { 10 | } 11 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/TestCaseMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.TestCase; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | 6 | /** 7 | * @author gomcarter 8 | * @date 2019-06-17 16:41:02 9 | */ 10 | public interface TestCaseMapper extends BaseMapper { 11 | } 12 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dao/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dao; 2 | 3 | import com.gomcarter.developer.entity.User; 4 | import com.gomcarter.frameworks.mybatis.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | /** 8 | * @author gomcarter on 2020-03-02 10:16:26 9 | */ 10 | public interface UserMapper extends BaseMapper { 11 | 12 | User getByUsername(@Param("username") String username); 13 | 14 | User getByName(@Param("name") String name); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/CustomFunctionDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.developer.holder.UserHolder; 4 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 5 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 6 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | /** 11 | * @author yangxiaohua 12 | * @date 2020-7-8 13:21 13 | */ 14 | @Data 15 | @Accessors(chain = true) 16 | public class CustomFunctionDto { 17 | @Notes("username") 18 | @Condition(field ="user_name" , type = MatchType.OR) 19 | private String userName; 20 | 21 | @Notes("is_public") 22 | @Condition(field ="is_public" , type = MatchType.OR) 23 | private Boolean isPublic; 24 | 25 | public CustomFunctionDto setIsPublic(Boolean isPublic) { 26 | this.isPublic = isPublic; 27 | if (isPublic) { 28 | this.setUserName(UserHolder.name()); 29 | } 30 | return this; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/CustomInterfacesDetailDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @author gomcarter 11 | * @date 2019-06-17 16:41:01 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class CustomInterfacesDetailDto { 16 | 17 | @Notes(value = "主键", notNull = true) 18 | private Long id; 19 | 20 | @Notes(value = "接口id", notNull = true) 21 | private Long interfacesId; 22 | 23 | @Notes(value = "用户名", notNull = true) 24 | private String username; 25 | 26 | @Notes(value = "接口唯一标识符", notNull = true) 27 | private String hash; 28 | 29 | @Notes(value = "控制器", notNull = true) 30 | private String controller; 31 | 32 | @Notes(value = "接口名称", notNull = true) 33 | private String name; 34 | 35 | @Notes(value = "接口地址,域名后面的一截如:http://g.yiayo.com/platform/category中的platform/category", notNull = true) 36 | private String url; 37 | 38 | @Notes(value = "GET, POST, PUT, PATCH, DELETE", notNull = true) 39 | private String method; 40 | 41 | @Notes(value = "是否已经废弃", notNull = true) 42 | private Boolean deprecated; 43 | 44 | @Notes(value = "详细描述:如返回值说明,接口的一些说明等", notNull = true) 45 | private String mark; 46 | 47 | @Notes(value = "返回值数据结构", notNull = true) 48 | private String returns; 49 | 50 | @Notes(value = "参数数据结构", notNull = true) 51 | private String parameters; 52 | 53 | @Notes(value = "属于哪个java项目", notNull = true) 54 | private JavaDto java; 55 | 56 | @Notes(value = "属于哪个前端项目", notNull = true) 57 | private EndDto end; 58 | 59 | @Notes(value = "创建时间", notNull = true) 60 | private Date createTime; 61 | 62 | @Notes(value = "更新时间", notNull = true) 63 | private Date modifyTime; 64 | 65 | @Notes("数据那个java项目") 66 | private Long javaId; 67 | 68 | @Notes("属于哪个前端项目") 69 | private Long endId; 70 | 71 | @Notes("检查点") 72 | private String javascript; 73 | } 74 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/CustomInterfacesItemDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | /** 8 | * @author 李银 on 2020-08-20 18:09:06 9 | */ 10 | @Data 11 | @Accessors(chain = true) 12 | public class CustomInterfacesItemDto { 13 | 14 | @Notes("主键") 15 | private Long id; 16 | 17 | @Notes("用例名称") 18 | private String name; 19 | 20 | @Notes("收藏接口 id") 21 | private Long customInterfacesId; 22 | 23 | @Notes("参数数据结构") 24 | private String cusParameters; 25 | 26 | @Notes("检查点脚本") 27 | private String javascript; 28 | 29 | @Notes("预置参数") 30 | private String preParams; 31 | 32 | @Notes("自定义header") 33 | private String cusHeaders; 34 | } 35 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/CustomInterfacesTopDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 接口列表 Top 7 | * 8 | * @author dyingbleed 9 | */ 10 | @Data 11 | public class CustomInterfacesTopDto { 12 | 13 | private String name; 14 | 15 | private Long value; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/EndAuthDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | /** 8 | * @author gomcarter 9 | * @date 2019-06-17 16:41:01 10 | */ 11 | @Data 12 | @Accessors(chain = true) 13 | public class EndAuthDto { 14 | 15 | @Notes("主键") 16 | private Long id; 17 | 18 | @Notes("主键") 19 | private String config; 20 | } 21 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/EndDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.developer.entity.End; 4 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author gomcarter 12 | * @date 2019-06-17 16:41:01 13 | */ 14 | @Data 15 | @Accessors(chain = true) 16 | public class EndDto { 17 | 18 | @Notes("主键") 19 | private Long id; 20 | 21 | @Notes("项目名称") 22 | private String name; 23 | 24 | @Notes("前缀") 25 | private String prefix; 26 | 27 | @Notes("header") 28 | private String header; 29 | 30 | @Notes("备注") 31 | private String mark; 32 | 33 | @Notes("鉴权配置") 34 | private String config; 35 | 36 | @Notes("创建时间") 37 | private Date createTime; 38 | 39 | public static EndDto of(End end) { 40 | return new EndDto() 41 | .setId(end.getId()) 42 | .setName(end.getName()) 43 | .setPrefix(end.getPrefix()) 44 | .setHeader(end.getHeader()) 45 | .setMark(end.getMark()) 46 | .setCreateTime(end.getCreateTime()); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/FavoriteTree.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.gomcarter.frameworks.interfaces.annotation.Ignore; 5 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | @Data 13 | @Accessors(chain = true) 14 | public class FavoriteTree { 15 | @Notes(value = "id", notNull = true) 16 | private Long id; 17 | 18 | @Notes(value = "名称", notNull = true) 19 | private String text; 20 | 21 | @Notes(value = "编码", notNull = true) 22 | private String code; 23 | 24 | @Notes(value = "是否是叶子节点:末端节点", notNull = true) 25 | private Boolean isLeaf; 26 | 27 | @Notes("排序,小的排前面") 28 | private Integer sort; 29 | 30 | @JsonIgnore 31 | @Ignore 32 | private Long parentId; 33 | 34 | @Notes(value = "子节点列表") 35 | private List nodes; 36 | 37 | public FavoriteTree addChild(FavoriteTree child) { 38 | if (child != null) { 39 | if (nodes == null) { 40 | nodes = new ArrayList<>(); 41 | } 42 | nodes.add(child); 43 | } 44 | return this; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/FunctionDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @author gomcarter on 2020-01-06 10:09:59 11 | */ 12 | @Data 13 | @Accessors(chain = true) 14 | public class FunctionDto { 15 | 16 | /** 17 | * 主键 18 | */ 19 | @Notes("主键") 20 | private Long id; 21 | /** 22 | * 用户id 23 | * 24 | */ 25 | @Notes("用户名") 26 | private String userName; 27 | /** 28 | * 函数名称 29 | */ 30 | @Notes("函数名称") 31 | private String name; 32 | /** 33 | * javascript脚本 34 | */ 35 | @Notes("javascript脚本") 36 | private String scriptText; 37 | /** 38 | * 脚本备注 39 | */ 40 | @Notes("脚本备注") 41 | private String mark; 42 | 43 | @Notes("示例参数") 44 | private String arguments; 45 | /** 46 | 是否公用 47 | **/ 48 | @Notes("是否公用") 49 | private Boolean isPublic; 50 | /** 51 | * 52 | */ 53 | @Notes("") 54 | private Date createTime; 55 | /** 56 | * 57 | */ 58 | @Notes("") 59 | private Date modifyTime; 60 | } 61 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/InterfacesDetailDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @author gomcarter 11 | * @date 2019-06-17 16:41:01 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class InterfacesDetailDto { 16 | 17 | @Notes(value = "主键:接口id或者历史版本id", notNull = true) 18 | private Long id; 19 | 20 | @Notes(value = "公共id,可用于发给外部人员", notNull = true) 21 | private String publicId; 22 | 23 | @Notes(value = "接口id", notNull = true) 24 | private Long interfacesId; 25 | 26 | @Notes(value = "接口唯一标识符", notNull = true) 27 | private String hash; 28 | 29 | @Notes(value = "控制器", notNull = true) 30 | private String controller; 31 | 32 | @Notes(value = "接口名称", notNull = true) 33 | private String name; 34 | 35 | @Notes(value = "拼接了端、服务的接口名称", notNull = true) 36 | private String complexName; 37 | 38 | @Notes(value = "接口地址,域名后面的一截如:http://g.yiayo.com/platform/category中的platform/category", notNull = true) 39 | private String url; 40 | 41 | @Notes(value = "GET, POST, PUT, PATCH, DELETE", notNull = true) 42 | private String method; 43 | 44 | @Notes(value = "是否已经废弃", notNull = true) 45 | private Boolean deprecated; 46 | 47 | @Notes(value = "详细描述:如返回值说明,接口的一些说明等", notNull = true) 48 | private String mark; 49 | 50 | @Notes(value = "返回值数据结构", notNull = true) 51 | private String returns; 52 | 53 | @Notes(value = "参数数据结构", notNull = true) 54 | private String parameters; 55 | 56 | @Notes(value = "属于哪个java项目", notNull = true) 57 | private JavaDto java; 58 | 59 | @Notes(value = "属于哪个前端项目", notNull = true) 60 | private EndDto end; 61 | 62 | @Notes(value = "创建时间", notNull = true) 63 | private Date createTime; 64 | 65 | @Notes(value = "更新时间", notNull = true) 66 | private Date modifyTime; 67 | } 68 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/InterfacesDistributionDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 接口分布 DTO 7 | * 8 | * @author dyingbleed 9 | */ 10 | @Data 11 | public class InterfacesDistributionDto { 12 | 13 | /** 14 | * 接口名 15 | * */ 16 | private String name; 17 | 18 | /** 19 | * 数量 20 | * */ 21 | private Long value; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/InterfacesDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @author gomcarter 11 | * @date 2019-06-17 16:41:01 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class InterfacesDto { 16 | 17 | @Notes(value = "主键", notNull = true) 18 | private Long id; 19 | 20 | @Notes(value = "接口唯一标识符", notNull = true) 21 | private String hash; 22 | 23 | @Notes(value = "控制器", notNull = true) 24 | private String controller; 25 | 26 | @Notes(value = "接口名称", notNull = true) 27 | private String name; 28 | 29 | @Notes(value = "接口地址,域名后面的一截如:http://g.yiayo.com/platform/category中的platform/category", notNull = true) 30 | private String url; 31 | 32 | @Notes(value = "GET, POST, PUT, PATCH, DELETE", notNull = true) 33 | private String method; 34 | 35 | @Notes(value = "是否已经废弃", notNull = true) 36 | private Boolean deprecated; 37 | 38 | @Notes(value = "详细描述:如返回值说明,接口的一些说明等", notNull = true) 39 | private String mark; 40 | 41 | @Notes(value = "属于哪个java项目", notNull = true) 42 | private String java; 43 | 44 | @Notes(value = "属于哪个前端项目", notNull = true) 45 | private String end; 46 | 47 | @Notes(value = "创建时间", notNull = true) 48 | private Date createTime; 49 | 50 | @Notes(value = "更新时间", notNull = true) 51 | private Date modifyTime; 52 | } 53 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/InterfacesPackageDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | import java.util.Date; 7 | import java.util.List; 8 | 9 | /** 10 | * @author gomcarter on 2020-03-06 14:08:14 11 | */ 12 | @Data 13 | @Accessors(chain = true) 14 | public class InterfacesPackageDto { 15 | 16 | private Long id; 17 | 18 | private String name; 19 | 20 | private String mark; 21 | 22 | private String config; 23 | 24 | private Long testCaseId; 25 | 26 | private String userName; 27 | 28 | private Date createTime; 29 | 30 | private Date modifyTime; 31 | 32 | private List interfacesIdList; 33 | 34 | } 35 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/JavaDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.developer.entity.Java; 4 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author gomcarter 12 | * @date 2019-06-17 16:41:01 13 | */ 14 | @Data 15 | @Accessors(chain = true) 16 | public class JavaDto { 17 | 18 | @Notes("主键") 19 | private Long id; 20 | 21 | @Notes("java模块名称") 22 | private String name; 23 | 24 | @Notes("别名") 25 | private String alias; 26 | 27 | @Notes("开发环境域名") 28 | private String devDomain; 29 | 30 | @Notes("测试环境域名") 31 | private String testDomain; 32 | 33 | @Notes("预发环境域名") 34 | private String prevDomain; 35 | 36 | @Notes("线上环境域名") 37 | private String onlineDomain; 38 | 39 | @Notes("返回值包装类") 40 | private String wrapper; 41 | 42 | @Notes("创建时间") 43 | private Date createTime; 44 | 45 | public static JavaDto of(Java java) { 46 | return new JavaDto() 47 | .setId(java.getId()) 48 | .setName(java.getName()) 49 | .setAlias(java.getAlias()) 50 | .setDevDomain(java.getDevDomain()) 51 | .setTestDomain(java.getTestDomain()) 52 | .setPrevDomain(java.getPrevDomain()) 53 | .setOnlineDomain(java.getOnlineDomain()) 54 | .setWrapper(java.getWrapper()) 55 | .setCreateTime(java.getCreateTime()); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/MarkDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @author gomcarter on 2020-02-10 16:05:03 11 | */ 12 | @Data 13 | @Accessors(chain = true) 14 | public class MarkDto { 15 | /** 16 | * 主键 17 | */ 18 | @Notes("主键") 19 | private Long id; 20 | /** 21 | * 用户 22 | */ 23 | @Notes("用户") 24 | private String user; 25 | /** 26 | * 备注内容 27 | */ 28 | @Notes("备注内容") 29 | private String mark; 30 | /** 31 | * 32 | */ 33 | @Notes("") 34 | private Date createTime; 35 | } 36 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/SettingOfUserDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | /** 8 | * @author gomcarter on 2020-03-02 10:29:14 9 | */ 10 | @Data 11 | @Accessors(chain = true) 12 | public class SettingOfUserDto { 13 | 14 | /** 15 | * 是否使用远程登录: 1-调用远程登录接口;2-使用本地user数据库 16 | */ 17 | @Notes("是否使用远程登录: 1-调用远程登录接口;2-使用本地user数据库") 18 | private Boolean remote; 19 | /** 20 | * 远程登录地址 21 | */ 22 | @Notes("远程登录地址") 23 | private String url; 24 | } 25 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/TestCaseDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @author gomcarter 11 | * @date 2019-06-17 16:41:02 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class TestCaseDto { 16 | 17 | @Notes("主键") 18 | private Long id; 19 | 20 | @Notes("用例名称") 21 | private String name; 22 | 23 | @Notes("用户名称(谁建的)") 24 | private String userName; 25 | 26 | @Notes("备注") 27 | private String mark; 28 | 29 | @Notes("预置参数") 30 | private String presetParams; 31 | 32 | @Notes("详细接口配置") 33 | private String workflow; 34 | 35 | @Notes("创建时间") 36 | private Date createTime; 37 | 38 | @Notes("上次修改时间") 39 | private Date modifyTime; 40 | 41 | } 42 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/TestCaseHistoryDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @author 李银 on 2020-07-17 21:35:29 11 | */ 12 | @Data 13 | @Accessors(chain = true) 14 | public class TestCaseHistoryDto { 15 | @Notes("主键") 16 | private Long id; 17 | 18 | @Notes("测试用例id") 19 | private Long testCaseId; 20 | 21 | @Notes("环境") 22 | private String env; 23 | 24 | @Notes("用例名称") 25 | private String name; 26 | 27 | @Notes("用户名称(谁执行的)") 28 | private String userName; 29 | 30 | @Notes("总共执行次数") 31 | private Integer total; 32 | 33 | @Notes("成功次数") 34 | private Integer success; 35 | 36 | @Notes("失败次数") 37 | private Integer failed; 38 | 39 | @Notes("执行结果") 40 | private String result; 41 | 42 | @Notes("") 43 | private Date createTime; 44 | 45 | @Notes("") 46 | private Date modifyTime; 47 | } 48 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/dto/UserDto.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.dto; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | import java.util.Date; 7 | 8 | /** 9 | * @author gomcarter on 2020年03月02日15:33:30 10 | */ 11 | @Data 12 | @Accessors(chain = true) 13 | public class UserDto { 14 | 15 | private Long id; 16 | 17 | /** 18 | * 登录账户名 19 | */ 20 | private String username; 21 | /** 22 | * 姓名 23 | */ 24 | private String name; 25 | /** 26 | * 邮箱 27 | */ 28 | private String mail; 29 | /** 30 | * 联系电话 31 | */ 32 | private String cellphone; 33 | /** 34 | * 创建时间 35 | */ 36 | private Date createTime; 37 | /** 38 | * 上次修改时间 39 | */ 40 | private Date modifyTime; 41 | 42 | //@NotReplaceableStart 43 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 44 | 45 | 46 | //@NotReplaceableEnd 47 | } 48 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/CustomInterfaces.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.FieldStrategy; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableField; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.util.Date; 11 | 12 | @Data 13 | @Accessors(chain = true) 14 | public class CustomInterfaces { 15 | 16 | /** 17 | * 主键 18 | */ 19 | @TableId(type = IdType.AUTO) 20 | private Long id; 21 | /** 22 | * 接口 id 23 | */ 24 | private Long interfacesId; 25 | /** 26 | * 用户名 27 | **/ 28 | private String username; 29 | 30 | /** 31 | * 收藏夹code 32 | */ 33 | @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED) 34 | private String favoriteCode; 35 | 36 | /** 37 | * 38 | */ 39 | private Date createTime; 40 | /** 41 | * 42 | */ 43 | private Date modifyTime; 44 | } 45 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/CustomInterfacesItem.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author 李银 on 2020-08-20 18:26:55 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class CustomInterfacesItem { 16 | 17 | /** 18 | * 主键 19 | */ 20 | @TableId(type = IdType.AUTO) 21 | private Long id; 22 | 23 | 24 | /** 25 | * 用例名称 26 | */ 27 | private String name; 28 | /** 29 | * 收藏接口 id 30 | */ 31 | private Long customInterfacesId; 32 | /** 33 | * 参数数据结构 34 | */ 35 | private String cusParameters; 36 | /** 37 | * 检查点脚本 38 | */ 39 | private String javascript; 40 | /** 41 | * 预置参数 42 | */ 43 | private String preParams; 44 | /** 45 | * 自定义header 46 | */ 47 | private String cusHeaders; 48 | /** 49 | * 50 | */ 51 | private Date createTime; 52 | /** 53 | * 54 | */ 55 | private Date modifyTime; 56 | 57 | //@NotReplaceableStart 58 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 59 | 60 | 61 | //@NotReplaceableEnd 62 | } 63 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/End.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author gomcarter 12 | * @date 2019-06-17 16:41:01 13 | */ 14 | @Data 15 | @Accessors(chain = true) 16 | public class End { 17 | 18 | /** 19 | * 主键 20 | */ 21 | @TableId(type = IdType.AUTO) 22 | private Long id; 23 | /** 24 | * 项目名称 25 | */ 26 | private String name; 27 | /** 28 | * 前缀 29 | */ 30 | private String prefix; 31 | /** 32 | * 必备header 33 | */ 34 | private String header; 35 | /** 36 | * 配置参数,json数据结构 37 | */ 38 | private String config; 39 | /** 40 | * 备注 41 | */ 42 | private String mark; 43 | /** 44 | * 45 | */ 46 | private Date createTime; 47 | /** 48 | * 49 | */ 50 | private Date modifyTime; 51 | 52 | } 53 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/EndAuth.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author gomcarter 12 | * @date 2019-06-17 16:41:01 13 | */ 14 | @Data 15 | @Accessors(chain = true) 16 | public class EndAuth { 17 | 18 | /** 19 | * 主键 20 | */ 21 | @TableId(type = IdType.AUTO) 22 | private Long id; 23 | /** 24 | * 哪个用户的 25 | */ 26 | private String user; 27 | /** 28 | * 前端项目id 29 | */ 30 | private Long fkEndId; 31 | /** 32 | * 配置参数,json数据结构 33 | */ 34 | private String config; 35 | /** 36 | * 37 | */ 38 | private Date createTime; 39 | /** 40 | * 41 | */ 42 | private Date modifyTime; 43 | 44 | } 45 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/Favorite.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.fasterxml.jackson.annotation.JsonIgnore; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | import java.util.Date; 10 | 11 | /** 12 | * @author 李银 on 2020-07-30 11:37:37 13 | */ 14 | @Data 15 | @Accessors(chain = true) 16 | public class Favorite { 17 | 18 | /** 19 | * 主键 20 | */ 21 | @TableId(type = IdType.AUTO) 22 | private Long id; 23 | 24 | /** 25 | * 对象版本,乐观锁需要可使用 26 | */ 27 | @JsonIgnore 28 | private Integer version; 29 | 30 | /** 31 | * 名称 32 | */ 33 | private String name; 34 | /** 35 | * 所属者 36 | */ 37 | private String owner; 38 | /** 39 | * 排序,大的排前面 40 | */ 41 | private Integer sort; 42 | /** 43 | * 编码:0101;01 44 | */ 45 | private String code; 46 | /** 47 | * 是否叶子节点 48 | */ 49 | private Boolean isLeaf; 50 | /** 51 | * 父分类ID 52 | */ 53 | private Long fkFavoriteId; 54 | /** 55 | * 56 | */ 57 | private Date createTime; 58 | /** 59 | * 60 | */ 61 | private Date modifyTime; 62 | 63 | //@NotReplaceableStart 64 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 65 | 66 | 67 | //@NotReplaceableEnd 68 | } 69 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/Function.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @author gomcarter on 2020-01-06 10:09:59 11 | */ 12 | @Data 13 | @Accessors(chain = true) 14 | @TableName("custom_function") 15 | public class Function { 16 | 17 | /** 18 | * 主键 19 | */ 20 | @TableId(type = IdType.AUTO) 21 | private Long id; 22 | 23 | 24 | /** 25 | * 函数名称 26 | */ 27 | private String name; 28 | /** 29 | * javascript脚本 30 | */ 31 | private String scriptText; 32 | /** 33 | * 脚本备注 34 | */ 35 | @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED) 36 | private String mark; 37 | /** 38 | * 39 | */ 40 | private Boolean isPublic; 41 | /** 42 | * 43 | */ 44 | @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED) 45 | private String arguments; 46 | 47 | private String userName; 48 | 49 | private Date createTime; 50 | /** 51 | * 52 | */ 53 | private Date modifyTime; 54 | 55 | //@NotReplaceableStart 56 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 57 | 58 | 59 | //@NotReplaceableEnd 60 | } 61 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/Interfaces.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * Interfaces 12 | * 13 | * @author gomcarter 14 | * @date 2019-06-17 16:41:01 15 | */ 16 | @Data 17 | @Accessors(chain = true) 18 | public class Interfaces { 19 | 20 | /** 21 | * 主键 22 | */ 23 | @TableId(type = IdType.AUTO) 24 | private Long id; 25 | /** 26 | * 认定唯一接口标识符 27 | */ 28 | private String hash; 29 | /** 30 | * 控制器 31 | */ 32 | private String controller; 33 | /** 34 | * 接口名称 35 | */ 36 | private String name; 37 | /** 38 | * 接口地址,域名后面的一截如:http://g.yiayo.com/platform/category中的platform/category 39 | */ 40 | private String url; 41 | /** 42 | * GET, POST, PUT, PATCH, DELETE 43 | */ 44 | private String method; 45 | /** 46 | * 是否已经废弃 47 | */ 48 | private Boolean deprecated; 49 | /** 50 | * 详细描述:如返回值说明,接口的一些说明等 51 | */ 52 | private String mark; 53 | /** 54 | * 返回值数据结构 55 | */ 56 | private String returns; 57 | /** 58 | * 返回值的参数类型 59 | */ 60 | private String returnsClassName; 61 | /** 62 | * 参数数据结构 63 | */ 64 | private String parameters; 65 | /** 66 | * 参数的参数类型 67 | */ 68 | private String parametersClassName; 69 | /** 70 | * 数据那个java项目 71 | */ 72 | private Long fkJavaId; 73 | /** 74 | * 属于哪个前端项目 75 | */ 76 | private Long fkEndId; 77 | /** 78 | * 79 | */ 80 | private Date createTime; 81 | /** 82 | * 83 | */ 84 | private Date modifyTime; 85 | } 86 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/InterfacesPackage.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.FieldStrategy; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableField; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.util.Date; 11 | 12 | /** 13 | * @author gomcarter on 2020-03-06 14:08:14 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class InterfacesPackage { 18 | 19 | /** 20 | * 主键 21 | */ 22 | @TableId(type = IdType.AUTO) 23 | private Long id; 24 | /** 25 | * 打包名称 26 | */ 27 | @TableField(updateStrategy = FieldStrategy.IGNORED) 28 | private String name; 29 | /** 30 | * 详细描述:如返回值说明,接口的一些说明等 31 | */ 32 | @TableField(updateStrategy = FieldStrategy.IGNORED) 33 | private String mark; 34 | /** 35 | * 接口聚合相关配置 36 | */ 37 | @TableField(updateStrategy = FieldStrategy.IGNORED) 38 | private String config; 39 | 40 | /** 41 | * 绑定一个test_case id 42 | */ 43 | private Long testCaseId; 44 | /** 45 | * 创建者 46 | */ 47 | private String userName; 48 | /** 49 | * 50 | */ 51 | private Date createTime; 52 | /** 53 | * 54 | */ 55 | private Date modifyTime; 56 | 57 | //@NotReplaceableStart 58 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 59 | 60 | 61 | //@NotReplaceableEnd 62 | } 63 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/InterfacesPackageItem.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author gomcarter on 2020-03-06 14:08:36 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class InterfacesPackageItem { 16 | 17 | /** 18 | * 主键 19 | */ 20 | @TableId(type = IdType.AUTO) 21 | private Long id; 22 | 23 | 24 | /** 25 | * interfaces id 26 | */ 27 | private Long interfacesId; 28 | /** 29 | * package id 30 | */ 31 | private Long interfacesPackageId; 32 | /** 33 | * 34 | */ 35 | private Date createTime; 36 | /** 37 | * 38 | */ 39 | private Date modifyTime; 40 | 41 | //@NotReplaceableStart 42 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 43 | 44 | 45 | //@NotReplaceableEnd 46 | } 47 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/InterfacesVersioned.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author gomcarter on 2019-12-13 11:24:57 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class InterfacesVersioned { 16 | 17 | /** 18 | * 主键 19 | */ 20 | @TableId(type = IdType.AUTO) 21 | private Long id; 22 | /** 23 | * 认定唯一接口标识符 24 | */ 25 | private String hash; 26 | /** 27 | * 接口 id 28 | */ 29 | private Long fkInterfacesId; 30 | /** 31 | * 接口名称 32 | */ 33 | private String name; 34 | /** 35 | * 控制器 36 | */ 37 | private String controller; 38 | /** 39 | * 接口地址,域名后面的一截如:http://g.cpsdb.com/platform/category中的platform/category 40 | */ 41 | private String url; 42 | /** 43 | * GET, POST, PUT, PATCH, DELETE 44 | */ 45 | private String method; 46 | /** 47 | * 是否已经废弃 48 | */ 49 | private Boolean deprecated; 50 | /** 51 | * 详细描述:如返回值说明,接口的一些说明等 52 | */ 53 | private String mark; 54 | /** 55 | * 返回值数据结构 56 | */ 57 | private String returns; 58 | /** 59 | * 参数数据结构 60 | */ 61 | private String parameters; 62 | /** 63 | * 属于哪个java项目 64 | */ 65 | private Long fkJavaId; 66 | /** 67 | * 属于哪个前端项目 68 | */ 69 | private Long fkEndId; 70 | /** 71 | * 72 | */ 73 | private Date createTime; 74 | /** 75 | * 76 | */ 77 | private Date modifyTime; 78 | 79 | //@NotReplaceableStart 80 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 81 | 82 | 83 | //@NotReplaceableEnd 84 | } 85 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/Java.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.FieldStrategy; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableField; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.util.Date; 11 | 12 | /** 13 | * @author gomcarter on 2019-06-17 16:41:01 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class Java { 18 | 19 | /** 20 | * 主键 21 | */ 22 | @TableId(type = IdType.AUTO) 23 | private Long id; 24 | /** 25 | * 模块名称 26 | */ 27 | private String name; 28 | /** 29 | * 应用别名 30 | */ 31 | private String alias; 32 | /** 33 | * 开发环境域名 34 | */ 35 | private String devDomain; 36 | /** 37 | * 测试环境域名 38 | */ 39 | private String testDomain; 40 | /** 41 | * 预发环境域名 42 | */ 43 | private String prevDomain; 44 | /** 45 | * 线上环境域名 46 | */ 47 | private String onlineDomain; 48 | /** 49 | * 返回值包装类 50 | */ 51 | @TableField(updateStrategy = FieldStrategy.IGNORED) 52 | private String wrapper; 53 | /** 54 | * 55 | */ 56 | private Date createTime; 57 | /** 58 | * 59 | */ 60 | private Date modifyTime; 61 | } 62 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/Mark.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author gomcarter on 2020-02-10 16:05:03 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class Mark { 16 | 17 | /** 18 | * 主键 19 | */ 20 | @TableId(type = IdType.AUTO) 21 | private Long id; 22 | /** 23 | * 用户 24 | */ 25 | private String user; 26 | /** 27 | * 备注内容 28 | */ 29 | private String mark; 30 | /** 31 | * 接口 id 32 | */ 33 | private Long fkInterfacesId; 34 | /** 35 | * 36 | */ 37 | private Date createTime; 38 | /** 39 | * 40 | */ 41 | private Date modifyTime; 42 | 43 | //@NotReplaceableStart 44 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 45 | 46 | 47 | //@NotReplaceableEnd 48 | } 49 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/SettingOfUser.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.FieldStrategy; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableField; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.util.Date; 11 | 12 | /** 13 | * @author gomcarter on 2020-03-02 10:29:14 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class SettingOfUser { 18 | 19 | /** 20 | * 主键 21 | */ 22 | @TableId(type = IdType.AUTO) 23 | private Long id; 24 | 25 | /** 26 | * 是否使用远程登录: 1-调用远程登录接口;2-使用本地user数据库 27 | */ 28 | private Boolean remote; 29 | /** 30 | * 远程登录地址 31 | */ 32 | @TableField(updateStrategy = FieldStrategy.IGNORED) 33 | private String url; 34 | /** 35 | * 36 | */ 37 | private Date createTime; 38 | /** 39 | * 40 | */ 41 | private Date modifyTime; 42 | 43 | //@NotReplaceableStart 44 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 45 | 46 | 47 | //@NotReplaceableEnd 48 | } 49 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/TestCase.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.FieldStrategy; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableField; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 8 | import lombok.Data; 9 | import lombok.experimental.Accessors; 10 | 11 | import java.util.Date; 12 | 13 | /** 14 | * @author gomcarter 15 | * @date 2019-06-17 16:41:02 16 | */ 17 | @Data 18 | @Accessors(chain = true) 19 | public class TestCase { 20 | /** 21 | * 主键 22 | */ 23 | @TableId(type = IdType.AUTO) 24 | private Long id; 25 | /** 26 | * 用例名称 27 | */ 28 | private String name; 29 | /** 30 | * 用户名称(谁建的) 31 | */ 32 | private String userName; 33 | /** 34 | * 预置参数 35 | */ 36 | @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED) 37 | private String presetParams; 38 | /** 39 | * 备注 40 | */ 41 | @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED) 42 | private String mark; 43 | 44 | @Notes("详细接口配置") 45 | private String workflow; 46 | /** 47 | * 48 | */ 49 | private Date createTime; 50 | /** 51 | * 52 | */ 53 | private Date modifyTime; 54 | } 55 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/TestCaseHistory.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author 李银 on 2020-07-17 21:38:50 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class TestCaseHistory { 16 | 17 | /** 18 | * 主键 19 | */ 20 | @TableId(type = IdType.AUTO) 21 | private Long id; 22 | 23 | /** 24 | * 测试用例id 25 | */ 26 | private Long testCaseId; 27 | 28 | /** 29 | * 环境 30 | */ 31 | private String env; 32 | 33 | /** 34 | * 用例名称 35 | */ 36 | private String name; 37 | /** 38 | * 用户名称(谁执行的) 39 | */ 40 | private String userName; 41 | /** 42 | * 总共执行次数 43 | */ 44 | private Integer total; 45 | /** 46 | * 成功次数 47 | */ 48 | private Integer success; 49 | /** 50 | * 失败次数 51 | */ 52 | private Integer failed; 53 | /** 54 | * 执行结果 55 | */ 56 | private String result; 57 | /** 58 | * 59 | */ 60 | private Date createTime; 61 | /** 62 | * 63 | */ 64 | private Date modifyTime; 65 | 66 | //@NotReplaceableStart 67 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 68 | 69 | 70 | //@NotReplaceableEnd 71 | } 72 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/entity/User.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.FieldStrategy; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableField; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.util.Date; 11 | 12 | /** 13 | * @author gomcarter on 2020-03-02 10:16:26 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class User { 18 | 19 | /** 20 | * 主键 21 | */ 22 | @TableId(type = IdType.AUTO) 23 | private Long id; 24 | 25 | /** 26 | * 登录账户名 27 | */ 28 | private String username; 29 | /** 30 | * 姓名 31 | */ 32 | @TableField(updateStrategy = FieldStrategy.IGNORED) 33 | private String name; 34 | /** 35 | * 邮箱 36 | */ 37 | @TableField(updateStrategy = FieldStrategy.IGNORED) 38 | private String mail; 39 | /** 40 | * 联系电话 41 | */ 42 | @TableField(updateStrategy = FieldStrategy.IGNORED) 43 | private String cellphone; 44 | /** 45 | * 密码 46 | */ 47 | private String password; 48 | /** 49 | * 随机数 50 | */ 51 | private String random; 52 | /** 53 | * 54 | */ 55 | private Date createTime; 56 | /** 57 | * 58 | */ 59 | private Date modifyTime; 60 | 61 | //@NotReplaceableStart 62 | // 重新生成代码时,NotReplaceableStart -> NotReplaceableEnd 中间的内容不会被覆盖 63 | 64 | 65 | //@NotReplaceableEnd 66 | } 67 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/holder/LoginUser.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.holder; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | /** 8 | * @author gomcarter 9 | * @date 2019-06-17 16:41:01 10 | */ 11 | @Data 12 | @Accessors(chain = true) 13 | public class LoginUser { 14 | @Notes("用户名称") 15 | private String name; 16 | 17 | @Notes("token") 18 | private String token; 19 | } 20 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/interceptors/UserInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.interceptors; 2 | 3 | import com.gomcarter.developer.holder.UserHolder; 4 | import com.gomcarter.frameworks.base.annotation.IgnoreLogin; 5 | import org.apache.commons.lang3.StringUtils; 6 | import org.springframework.context.annotation.Configuration; 7 | import org.springframework.web.bind.annotation.RequestMethod; 8 | import org.springframework.web.method.HandlerMethod; 9 | import org.springframework.web.servlet.ModelAndView; 10 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 11 | 12 | import javax.servlet.http.HttpServletRequest; 13 | import javax.servlet.http.HttpServletResponse; 14 | 15 | /** 16 | * 商户平台拦截器配置 17 | * 18 | * @author 李银 on 2018年3月29日 16:29:58 19 | */ 20 | @Configuration 21 | public class UserInterceptor extends HandlerInterceptorAdapter { 22 | 23 | @Override 24 | public boolean preHandle(HttpServletRequest request, 25 | HttpServletResponse response, Object handler) throws Exception { 26 | 27 | /*复杂请求的探针,这里需要直接通过*/ 28 | if (StringUtils.equalsIgnoreCase(RequestMethod.OPTIONS.name(), request.getMethod())) { 29 | return true; 30 | } 31 | 32 | HandlerMethod handlerMethod = (HandlerMethod) handler; 33 | IgnoreLogin il = handlerMethod.getMethod().getAnnotation(IgnoreLogin.class); 34 | if (il != null) { 35 | return true; 36 | } 37 | 38 | // 解析账号信息,存到UserHolder中 39 | UserHolder.auth(request); 40 | 41 | return true; 42 | } 43 | 44 | /** 45 | * This implementation is empty. 46 | */ 47 | @Override 48 | public void postHandle(HttpServletRequest request, 49 | HttpServletResponse response, Object handler, 50 | ModelAndView modelAndView) throws Exception { 51 | 52 | } 53 | 54 | /** 55 | * This implementation is empty. 56 | */ 57 | @Override 58 | public void afterCompletion(HttpServletRequest request, 59 | HttpServletResponse response, Object handler, Exception ex) 60 | throws Exception { 61 | UserHolder.reset(); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/CustomInterfacesItemParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 5 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | /** 10 | * @author 李银 on 2020-08-20 18:09:06 11 | */ 12 | @Data 13 | @Accessors(chain = true) 14 | public class CustomInterfacesItemParam { 15 | 16 | @Notes("主键") 17 | @Condition(type = MatchType.LE) 18 | private Long id; 19 | 20 | @Notes("收藏接口 id") 21 | private Long customInterfacesId; 22 | 23 | @Notes("用例名称") 24 | @Condition(type = MatchType.LIKE) 25 | private String name; 26 | } 27 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/CustomInterfacesQueryParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 5 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | import java.util.Set; 10 | 11 | /** 12 | * @author gomcarter 13 | * @date 2019-06-17 16:41:01 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class CustomInterfacesQueryParam { 18 | @Notes("主键") 19 | private Long id; 20 | 21 | @Notes("主键set") 22 | @Condition(field = "id", type = MatchType.IN) 23 | private Set idList; 24 | 25 | @Notes(value = "接口唯一标识符") 26 | private String hash; 27 | 28 | @Notes(value = "接口唯一标识符") 29 | @Condition(field = "hash", type = MatchType.IN) 30 | private Set hashSet; 31 | 32 | @Notes("接口名称") 33 | @Condition(type = MatchType.LIKE) 34 | private String name; 35 | 36 | @Notes("收藏夹code") 37 | private String favoriteCode; 38 | 39 | @Notes("控制器") 40 | @Condition(type = MatchType.LIKE) 41 | private String controller; 42 | 43 | @Notes("接口地址,域名后面的一截如:http://g.yiayo.com/platform/category中的platform/category") 44 | @Condition(type = MatchType.LIKE) 45 | private String url; 46 | 47 | @Notes("GET, POST, PUT, PATCH, DELETE") 48 | @Condition(type = MatchType.LIKE) 49 | private String method; 50 | 51 | @Notes("是否已经废弃") 52 | private Boolean deprecated; 53 | 54 | @Notes("详细描述:如返回值说明,接口的一些说明等") 55 | private String mark; 56 | 57 | @Notes("属于哪个java项目") 58 | @Condition(field = "fk_java_id") 59 | private Long javaId; 60 | 61 | @Notes("属于哪个前端项目") 62 | @Condition(field = "fk_end_id") 63 | private Long endId; 64 | 65 | @Notes("属于哪个接口") 66 | @Condition(field = "interfaces_id") 67 | private Long interfacesId; 68 | 69 | @Notes("用户") 70 | @Condition(field = "username") 71 | private String username; 72 | } 73 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/Edge.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | /** 7 | * @author gomcarter on 2020-03-02 10:16:26 8 | */ 9 | @Data 10 | @Accessors(chain = true) 11 | public class Edge { 12 | private String id; 13 | private String source; 14 | private String target; 15 | } 16 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/EndAuthParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | /** 8 | * @author gomcarter on 2019-06-17 16:41:01 9 | */ 10 | @Data 11 | @Accessors(chain = true) 12 | public class EndAuthParam { 13 | 14 | @Notes("主键") 15 | private Long id; 16 | 17 | @Notes("哪个用户的") 18 | private String user; 19 | 20 | @Notes("前端项目id") 21 | private Long fkEndId; 22 | } 23 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/EndParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 5 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | /** 10 | * @author gomcarter on 2019-06-17 16:41:01 11 | */ 12 | @Data 13 | @Accessors(chain = true) 14 | public class EndParam { 15 | 16 | @Notes("主键") 17 | private Long id; 18 | 19 | @Notes("项目名称") 20 | @Condition(type = MatchType.LIKE) 21 | private String name; 22 | } 23 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/FavoriteParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 4 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | /** 9 | * @author 李银 on 2020-07-30 11:37:37 10 | */ 11 | @Data 12 | @Accessors(chain = true) 13 | public class FavoriteParam { 14 | 15 | private Long id; 16 | 17 | private String owner; 18 | 19 | private Long fkFavoriteId; 20 | 21 | @Condition(field = "fk_favorite_id", type = MatchType.NULL) 22 | private boolean favoriteNull; 23 | } 24 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/FunctionParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.developer.dto.CustomFunctionDto; 4 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 5 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 6 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.util.Date; 11 | import java.util.Set; 12 | 13 | /** 14 | * @author gomcarter on 2020-01-06 10:09:59 15 | */ 16 | @Data 17 | @Accessors(chain = true) 18 | public class FunctionParam { 19 | @Notes("主键") 20 | private Long id; 21 | 22 | @Notes("id list") 23 | @Condition(field = "id", type = MatchType.IN) 24 | private Set idList; 25 | 26 | @Notes("函数名称") 27 | @Condition(type = MatchType.LIKE) 28 | private String name; 29 | 30 | @Notes("脚本备注") 31 | @Condition(type = MatchType.LIKE) 32 | private String mark; 33 | 34 | @Notes("username or is_public") 35 | @Condition(type = MatchType.AND) 36 | private CustomFunctionDto customFunctionDto; 37 | 38 | @Notes("创建时间大于这个时间") 39 | @Condition(field = "create_time", type = MatchType.GE) 40 | private Date createTimeGE; 41 | 42 | @Notes("创建时间小于这个时间") 43 | @Condition(field = "create_time", type = MatchType.LE) 44 | private Date createTimeLE; 45 | } 46 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/Interface.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | 7 | @Data 8 | @Accessors(chain = true) 9 | public class Interface { 10 | private String hash; //: "db1159ab2e3a58993c5a866dcad687be" 11 | private Long interfaceId; //: 568 12 | // java: {id: 1, name: "天狗-微信中心", alias: "wechat", devDomain: "http://wechat.dev.66buy.com.cn", testDomain: "http://wechat.test.66buy.com.cn", …} 13 | private RequestMethod method;// : "GET" 14 | // private String parameters; // : (8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] 15 | private String url; // : "/applet/broadcast/list" 16 | private String javascript; 17 | } 18 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/InterfacesPackageItemParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 5 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | /** 13 | * @author gomcarter on 2020-03-06 14:08:36 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class InterfacesPackageItemParam { 18 | 19 | /** 20 | * 主键 21 | */ 22 | @Notes("主键") 23 | private Long id; 24 | 25 | /** 26 | * interfaces id 27 | */ 28 | @Notes("interfaces id") 29 | private Long interfacesId; 30 | /** 31 | * package id 32 | */ 33 | @Notes("package id") 34 | private Long interfacesPackageId; 35 | 36 | @Notes("package id") 37 | @Condition(field = "interfaces_package_id", type = MatchType.IN) 38 | private List packageIdList; 39 | /** 40 | * 41 | */ 42 | @Notes("") 43 | private Date createTime; 44 | /** 45 | * 46 | */ 47 | @Notes("") 48 | private Date modifyTime; 49 | } 50 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/InterfacesPackageParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 5 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | /** 10 | * @author gomcarter on 2020-03-06 14:08:14 11 | */ 12 | @Data 13 | @Accessors(chain = true) 14 | public class InterfacesPackageParam { 15 | 16 | @Notes("主键") 17 | private Long id; 18 | 19 | @Notes("接口名称") 20 | @Condition(type = MatchType.LIKE) 21 | private String name; 22 | 23 | @Notes("创建人") 24 | @Condition(type = MatchType.LIKE) 25 | private String userName; 26 | 27 | @Notes("详细描述:如返回值说明,接口的一些说明等") 28 | @Condition(type = MatchType.LIKE) 29 | private String mark; 30 | 31 | @Notes("绑定一个test_case id") 32 | private Long testCaseId; 33 | } 34 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/InterfacesQueryParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 5 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | import java.util.Set; 10 | 11 | /** 12 | * @author gomcarter 13 | * @date 2019-06-17 16:41:01 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class InterfacesQueryParam { 18 | @Notes("主键") 19 | private Long id; 20 | 21 | @Notes("主键set") 22 | @Condition(field = "id", type = MatchType.IN) 23 | private Set idList; 24 | 25 | @Notes(value = "接口唯一标识符") 26 | private String hash; 27 | 28 | @Notes(value = "接口唯一标识符") 29 | @Condition(field = "hash", type = MatchType.IN) 30 | private Set hashSet; 31 | 32 | @Notes("接口名称") 33 | @Condition(type = MatchType.LIKE) 34 | private String name; 35 | 36 | @Notes("控制器") 37 | @Condition(type = MatchType.LIKE) 38 | private String controller; 39 | 40 | @Notes("接口地址,域名后面的一截如:http://g.yiayo.com/platform/category中的platform/category") 41 | @Condition(type = MatchType.LIKE) 42 | private String url; 43 | 44 | @Notes("GET, POST, PUT, PATCH, DELETE") 45 | @Condition(type = MatchType.LIKE) 46 | private String method; 47 | 48 | @Notes("是否已经废弃") 49 | private Boolean deprecated; 50 | 51 | @Notes("详细描述:如返回值说明,接口的一些说明等") 52 | private String mark; 53 | 54 | @Notes("属于哪个java项目") 55 | @Condition(field = "fk_java_id") 56 | private Long javaId; 57 | 58 | @Notes("属于哪个前端项目") 59 | @Condition(field = "fk_end_id") 60 | private Long endId; 61 | } 62 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/InterfacesVersionedParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 5 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | import java.util.Date; 10 | import java.util.Set; 11 | 12 | /** 13 | * @author gomcarter on 2019-12-13 11:24:57 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class InterfacesVersionedParam { 18 | 19 | /** 20 | * 主键 21 | */ 22 | @Notes("主键") 23 | private Long id; 24 | /** 25 | * 认定唯一接口标识符 26 | */ 27 | @Notes("认定唯一接口标识符") 28 | private String hash; 29 | 30 | @Notes(value = "接口唯一标识符") 31 | @Condition(field = "hash", type = MatchType.IN) 32 | private Set hashSet; 33 | /** 34 | * 接口 id 35 | */ 36 | @Notes("接口 id") 37 | @Condition(field = "fk_interfaces_id") 38 | private Long interfacesId; 39 | /** 40 | * 接口名称 41 | */ 42 | @Notes("接口名称") 43 | private String name; 44 | /** 45 | * 控制器 46 | */ 47 | @Notes("控制器") 48 | private String controller; 49 | /** 50 | * 接口地址,域名后面的一截如:http://g.cpsdb.com/platform/category中的platform/category 51 | */ 52 | @Notes("接口地址,域名后面的一截如:http://g.cpsdb.com/platform/category中的platform/category") 53 | private String url; 54 | /** 55 | * GET, POST, PUT, PATCH, DELETE 56 | */ 57 | @Notes("GET, POST, PUT, PATCH, DELETE") 58 | private String method; 59 | /** 60 | * 是否已经废弃 61 | */ 62 | @Notes("是否已经废弃") 63 | private Boolean deprecated; 64 | /** 65 | * 详细描述:如返回值说明,接口的一些说明等 66 | */ 67 | @Notes("详细描述:如返回值说明,接口的一些说明等") 68 | private String mark; 69 | /** 70 | * 返回值数据结构 71 | */ 72 | @Notes("返回值数据结构") 73 | private String returns; 74 | /** 75 | * 参数数据结构 76 | */ 77 | @Notes("参数数据结构") 78 | private String parameters; 79 | /** 80 | * 属于哪个java项目 81 | */ 82 | @Notes("属于哪个java项目") 83 | private Long fkJavaId; 84 | /** 85 | * 属于哪个前端项目 86 | */ 87 | @Notes("属于哪个前端项目") 88 | private Long fkEndId; 89 | /** 90 | * 91 | */ 92 | @Notes("") 93 | private Date createTime; 94 | /** 95 | * 96 | */ 97 | @Notes("") 98 | private Date modifyTime; 99 | } 100 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/JavaQueryParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 5 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | /** 10 | * @author gomcarter 11 | * @date 2019-06-17 16:41:01 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class JavaQueryParam { 16 | /** 17 | * 主键 18 | */ 19 | @Notes("主键") 20 | private Long id; 21 | /** 22 | * 模块名称 23 | */ 24 | @Notes("模块名称") 25 | @Condition(type = MatchType.LIKE) 26 | private String name; 27 | } 28 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/MarkParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | /** 8 | * @author gomcarter on 2020-02-10 16:05:03 9 | */ 10 | @Data 11 | @Accessors(chain = true) 12 | public class MarkParam { 13 | /** 14 | * 主键 15 | */ 16 | @Notes("主键") 17 | private Long id; 18 | /** 19 | * 备注内容 20 | */ 21 | @Notes("备注内容") 22 | private String mark; 23 | /** 24 | * 接口 id 25 | */ 26 | @Notes("接口 id") 27 | private Long fkInterfacesId; 28 | } 29 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/Node.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | /** 7 | * @author gomcarter on 2020-03-02 10:16:26 8 | */ 9 | @Data 10 | @Accessors(chain = true) 11 | public class Node { 12 | private String id; 13 | 14 | private Interface data; 15 | } 16 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/SettingOfUserParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | /** 8 | * @author gomcarter on 2020-03-02 10:29:14 9 | */ 10 | @Data 11 | @Accessors(chain = true) 12 | public class SettingOfUserParam { 13 | 14 | /** 15 | * 主键 16 | */ 17 | @Notes("主键") 18 | private Long id; 19 | 20 | /** 21 | * 是否使用远程登录: 1-调用远程登录接口;2-使用本地user数据库 22 | */ 23 | @Notes("是否使用远程登录: 1-调用远程登录接口;2-使用本地user数据库") 24 | private Boolean remote; 25 | /** 26 | * 远程登录地址 27 | */ 28 | @Notes("远程登录地址") 29 | private String url; 30 | } 31 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/TestCaseHistoryParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | /** 8 | * @author 李银 on 2020-07-17 21:35:29 9 | */ 10 | @Data 11 | @Accessors(chain = true) 12 | public class TestCaseHistoryParam { 13 | 14 | @Notes("测试用例id") 15 | private Long testCaseId; 16 | 17 | @Notes("环境") 18 | private String env; 19 | 20 | @Notes("用例名称") 21 | private String name; 22 | 23 | @Notes("总共执行次数") 24 | private Integer total; 25 | 26 | @Notes("成功次数") 27 | private Integer success; 28 | 29 | @Notes("执行结果") 30 | private String result; 31 | } 32 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/TestCaseHistoryQueryParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Ignore; 4 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 5 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 6 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | /** 11 | * @author 李银 on 2020-07-17 21:35:29 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class TestCaseHistoryQueryParam { 16 | 17 | @Notes("主键") 18 | private Long id; 19 | 20 | @Notes("环境") 21 | private String env; 22 | 23 | @Notes("用例名称") 24 | @Condition(type = MatchType.LIKE) 25 | private String name; 26 | 27 | @Notes("用户名称(谁执行的)") 28 | @Ignore 29 | private String userName; 30 | } 31 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/TestCaseParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import javax.validation.constraints.NotNull; 8 | 9 | /** 10 | * @author gomcarter 11 | * @date 2019-06-17 16:41:02 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class TestCaseParam { 16 | 17 | @Notes("用例名称") 18 | @NotNull 19 | private String name; 20 | 21 | @Notes("预置参数") 22 | private String presetParams; 23 | 24 | @Notes("备注") 25 | private String mark; 26 | 27 | @Notes("详细接口配置") 28 | private String workflow; 29 | 30 | @Notes("接口打包id") 31 | private Long packageId; 32 | } 33 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/TestCaseQueryParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 4 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 5 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | import java.util.Date; 10 | 11 | /** 12 | * @author gomcarter 13 | * @date 2019-06-17 16:41:02 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class TestCaseQueryParam { 18 | @Notes("主键") 19 | private Long id; 20 | 21 | @Notes("用例名称") 22 | @Condition(type = MatchType.LIKE) 23 | private String name; 24 | 25 | @Notes("用户名称(谁建的)") 26 | private String userName; 27 | 28 | @Notes("备注") 29 | private String mark; 30 | 31 | @Notes("创建时间大于这个时间") 32 | @Condition(field = "create_time", type = MatchType.GE) 33 | private Date createTimeGE; 34 | 35 | @Notes("创建时间小于这个时间") 36 | @Condition(field = "create_time", type = MatchType.LE) 37 | private Date createTimeLE; 38 | } 39 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/UserParam.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import com.gomcarter.frameworks.base.common.CustomDateUtils; 4 | import com.gomcarter.frameworks.interfaces.annotation.Notes; 5 | import com.gomcarter.frameworks.mybatis.annotation.Condition; 6 | import com.gomcarter.frameworks.mybatis.annotation.MatchType; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.util.Date; 11 | 12 | /** 13 | * @author gomcarter on 2020-03-02 10:16:26 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class UserParam { 18 | 19 | @Notes("主键") 20 | private Long id; 21 | 22 | @Notes("登录账户名") 23 | @Condition(type = MatchType.LIKE) 24 | private String username; 25 | 26 | @Notes("姓名") 27 | @Condition(type = MatchType.LIKE) 28 | private String name; 29 | 30 | @Notes("邮箱") 31 | @Condition(type = MatchType.LIKE) 32 | private String mail; 33 | 34 | @Notes("联系电话") 35 | @Condition(type = MatchType.LIKE) 36 | private String cellphone; 37 | 38 | @Notes("创建时间大于等于这个时间") 39 | @Condition(field = "create_time", type = MatchType.GE) 40 | private Date createTimeGE; 41 | 42 | @Notes("创建时间小于等于这个时间") 43 | @Condition(field = "create_time", type = MatchType.LE) 44 | private Date createTimeLE; 45 | 46 | @Notes("上次修改时间小于等于这个时间") 47 | @Condition(field = "modify_time", type = MatchType.GE) 48 | private Date modifyTimeGE; 49 | 50 | @Notes("上次修改时间小于等于这个时间") 51 | @Condition(field = "modify_time", type = MatchType.LE) 52 | private Date modifyTimeLE; 53 | 54 | public UserParam setCreateTimeLE(Date createTimeLE) { 55 | this.createTimeLE = CustomDateUtils.addDays(createTimeLE, 1); 56 | return this; 57 | } 58 | 59 | public UserParam setModifyTimeLE(Date modifyTimeLE) { 60 | this.modifyTimeLE = CustomDateUtils.addDays(modifyTimeLE, 1); 61 | return this; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/Workflow.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author gomcarter on 2020-03-02 10:16:26 10 | */ 11 | @Data 12 | @Accessors(chain = true) 13 | public class Workflow { 14 | 15 | private List edges; 16 | 17 | private List nodes; 18 | } 19 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/params/Xhr.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.params; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | /** 7 | * @author gomcarter on 2020-03-02 10:16:26 8 | */ 9 | @Data 10 | @Accessors(chain = true) 11 | public class Xhr { 12 | private String url; 13 | private String method; 14 | private String params; 15 | private String headers; 16 | private String body; 17 | } 18 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/publics/PublicsInterfacesController.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.publics; 2 | 3 | import com.gomcarter.developer.dto.InterfacesDetailDto; 4 | import com.gomcarter.developer.service.InterfacesService; 5 | import com.gomcarter.frameworks.base.common.AssertUtils; 6 | import com.gomcarter.frameworks.base.common.BlowfishUtils; 7 | import com.gomcarter.frameworks.base.common.CustomStringUtils; 8 | import com.gomcarter.frameworks.base.exception.CustomException; 9 | import com.gomcarter.frameworks.interfaces.dto.ApiInterface; 10 | import com.gomcarter.frameworks.interfaces.utils.InterfacesRegister; 11 | import org.apache.commons.lang3.StringUtils; 12 | import org.springframework.web.bind.annotation.*; 13 | 14 | import javax.annotation.Resource; 15 | import java.util.List; 16 | 17 | /** 18 | * @author gomcarter 19 | */ 20 | @RestController 21 | @RequestMapping("publics/interfaces") 22 | public class PublicsInterfacesController { 23 | 24 | @Resource 25 | private InterfacesService interfacesService; 26 | 27 | @PostMapping(value = "", name = "生成接口") 28 | public Integer insert(@RequestParam Long javaId, @RequestBody List interfaceList) { 29 | return this.interfacesService.insert(javaId, interfaceList); 30 | } 31 | 32 | @GetMapping(value = "{key}", name = "公共获取接口详情") 33 | InterfacesDetailDto detail(@PathVariable("key") String key) throws Exception { 34 | try { 35 | String[] encryptAndKey = StringUtils.split(key, "|"); 36 | if (encryptAndKey == null || encryptAndKey.length != 2) { 37 | throw new CustomException("没有权限"); 38 | } 39 | String encrypt = encryptAndKey[0], hash = encryptAndKey[1]; 40 | Long id = CustomStringUtils.parseLong(BlowfishUtils.decrypt(encrypt, hash)); 41 | AssertUtils.notNull(id, new CustomException("没有权限")); 42 | 43 | InterfacesDetailDto detail = this.interfacesService.detail(id); 44 | AssertUtils.notNull(id, new CustomException("没有权限")); 45 | 46 | AssertUtils.isTrue(StringUtils.equals(detail.getHash(), encryptAndKey[1]), new CustomException("没有权限")); 47 | return detail; 48 | } catch (Exception e) { 49 | return null; 50 | } 51 | } 52 | 53 | public static void main(String[] args) { 54 | System.setProperty("interfaces.domain", "http://developer.dev.66buy.com.cn/"); 55 | System.setProperty("interfaces.javaId", "1"); 56 | 57 | InterfacesRegister.registerFrom(PublicsInterfacesController.class); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/publics/PublicsMockController.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.publics; 2 | 3 | import com.gomcarter.developer.entity.Interfaces; 4 | import com.gomcarter.developer.entity.InterfacesVersioned; 5 | import com.gomcarter.developer.service.InterfacesService; 6 | import com.gomcarter.developer.service.InterfacesVersionedService; 7 | import com.gomcarter.frameworks.interfaces.utils.MockUtils; 8 | import org.springframework.web.bind.annotation.GetMapping; 9 | import org.springframework.web.bind.annotation.PathVariable; 10 | import org.springframework.web.bind.annotation.RequestMapping; 11 | import org.springframework.web.bind.annotation.RestController; 12 | 13 | import javax.annotation.Resource; 14 | import java.util.Optional; 15 | 16 | /** 17 | * @author gomcarter 18 | */ 19 | @RestController 20 | @RequestMapping("publics/mock") 21 | public class PublicsMockController { 22 | 23 | @Resource 24 | InterfacesService interfacesService; 25 | 26 | @Resource 27 | InterfacesVersionedService interfacesVersionedService; 28 | 29 | @GetMapping(value = "{hash}", name = "测试") 30 | Object mock(@PathVariable("hash") String hash) { 31 | // 先从当前版本找,没找到就去历史版本找,找不到就是null 32 | String returns = Optional.ofNullable(interfacesService.getByHash(hash)).map(Interfaces::getReturns) 33 | .orElse(Optional.ofNullable(interfacesVersionedService.getByHash(hash)).map(InterfacesVersioned::getReturns).orElse(null)); 34 | 35 | if (returns == null) { 36 | return null; 37 | } 38 | 39 | return MockUtils.mock(returns); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/service/EndAuthService.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.service; 2 | 3 | import com.gomcarter.developer.dao.EndAuthMapper; 4 | import com.gomcarter.developer.entity.EndAuth; 5 | import com.gomcarter.developer.params.EndAuthParam; 6 | import com.gomcarter.frameworks.base.pager.Pageable; 7 | import org.springframework.stereotype.Service; 8 | 9 | import javax.annotation.Resource; 10 | import java.util.Collection; 11 | import java.util.List; 12 | 13 | /** 14 | * @author gomcarter 15 | * @date 2019-06-17 16:41:01 16 | */ 17 | @Service 18 | public class EndAuthService { 19 | 20 | @Resource 21 | private EndAuthMapper endAuthMapper; 22 | 23 | public void insert(EndAuth endAuth) { 24 | endAuthMapper.insert(endAuth); 25 | } 26 | 27 | public void update(EndAuth endAuth) { 28 | endAuthMapper.update(endAuth); 29 | } 30 | 31 | public EndAuth getById(Long id) { 32 | return endAuthMapper.getById(id); 33 | } 34 | 35 | public List getByIdList(Collection idList) { 36 | return endAuthMapper.getByIdList(idList); 37 | } 38 | 39 | public List query(R params, Pageable pager) { 40 | return endAuthMapper.query(params, pager); 41 | } 42 | 43 | public Integer count(R params) { 44 | return endAuthMapper.count(params); 45 | } 46 | 47 | public EndAuth get(Long endId, String user) { 48 | return this.endAuthMapper.getUnique(new EndAuthParam().setFkEndId(endId).setUser(user)); 49 | } 50 | 51 | public void update(Long endId, String username, String config) { 52 | EndAuth endAuth = this.get(endId, username); 53 | if (endAuth == null) { 54 | this.insert(new EndAuth() 55 | .setFkEndId(endId) 56 | .setUser(username) 57 | .setConfig(config) 58 | ); 59 | } else { 60 | this.update(endAuth 61 | .setConfig(config) 62 | ); 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/service/EndService.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.service; 2 | 3 | import com.gomcarter.developer.dao.EndMapper; 4 | import com.gomcarter.developer.entity.End; 5 | import com.gomcarter.frameworks.base.pager.Pageable; 6 | import com.gomcarter.frameworks.base.streaming.Streamable; 7 | import org.apache.commons.lang3.StringUtils; 8 | import org.springframework.stereotype.Service; 9 | 10 | import javax.annotation.Resource; 11 | import java.util.Collection; 12 | import java.util.List; 13 | import java.util.Map; 14 | import java.util.Set; 15 | 16 | /** 17 | * @author gomcarter 18 | * @date 2019-06-17 16:41:01 19 | */ 20 | @Service 21 | public class EndService { 22 | 23 | @Resource 24 | private EndMapper endMapper; 25 | 26 | public void insert(End end) { 27 | endMapper.insert(end); 28 | } 29 | 30 | public void update(End end) { 31 | endMapper.update(end); 32 | } 33 | 34 | public End getById(Long id) { 35 | return endMapper.getById(id); 36 | } 37 | 38 | public List getByIdList(Collection idList) { 39 | return endMapper.getByIdList(idList); 40 | } 41 | 42 | public List query(R params, Pageable pager) { 43 | return endMapper.query(params, pager); 44 | } 45 | 46 | public Integer count(R params) { 47 | return endMapper.count(params); 48 | } 49 | 50 | public End getByPrefix(String prefix) { 51 | if (StringUtils.isBlank(prefix)) { 52 | return null; 53 | } 54 | return this.endMapper.getByPrefix(prefix); 55 | } 56 | 57 | public End insertOrGetDefault() { 58 | End end = this.getByPrefix("publics"); 59 | if (end == null) { 60 | end = new End(); 61 | this.insert( 62 | end.setName("公共系统") 63 | .setPrefix("publics") 64 | ); 65 | } 66 | return end; 67 | } 68 | 69 | public Map getMapByIdList(Set idList) { 70 | return Streamable.valueOf(this.getByIdList(idList)).uniqueGroupby(End::getId).collect(); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/service/FunctionService.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.service; 2 | 3 | import com.gomcarter.developer.dao.FunctionMapper; 4 | import com.gomcarter.developer.entity.Function; 5 | import com.gomcarter.frameworks.base.pager.Pageable; 6 | import org.springframework.stereotype.Service; 7 | 8 | import javax.annotation.Resource; 9 | import java.util.Collection; 10 | import java.util.List; 11 | 12 | /** 13 | * @author gomcarter on 2020-01-06 10:09:59 14 | */ 15 | @Service 16 | public class FunctionService { 17 | 18 | @Resource 19 | private FunctionMapper functionMapper; 20 | 21 | public void insert(Function function) { 22 | functionMapper.insert(function); 23 | } 24 | 25 | public void insertNoisy(Function function) { 26 | functionMapper.insertNoisy(function); 27 | } 28 | 29 | public void update(Function function) { 30 | functionMapper.update(function); 31 | } 32 | 33 | public void updateCas(Function function) { 34 | functionMapper.cas(function); 35 | } 36 | 37 | public void updateCasNoisy(Function function) { 38 | functionMapper.casNoisy(function); 39 | } 40 | 41 | public Function getById(Long id) { 42 | return functionMapper.getById(id); 43 | } 44 | 45 | public List getByIdList(Collection idList) { 46 | return functionMapper.getByIdList(idList); 47 | } 48 | 49 | public

List query(P params, Pageable pager) { 50 | return functionMapper.query(params, pager); 51 | } 52 | public

Integer count(P params) { 53 | return functionMapper.count(params); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/service/JavaService.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.service; 2 | 3 | import com.gomcarter.developer.dao.JavaMapper; 4 | import com.gomcarter.developer.entity.Java; 5 | import com.gomcarter.frameworks.base.common.CollectionUtils; 6 | import com.gomcarter.frameworks.base.pager.Pageable; 7 | import com.gomcarter.frameworks.base.streaming.Streamable; 8 | import org.springframework.stereotype.Service; 9 | 10 | import javax.annotation.Resource; 11 | import java.util.Collection; 12 | import java.util.HashMap; 13 | import java.util.List; 14 | import java.util.Map; 15 | 16 | /** 17 | * @author gomcarter 18 | * @date 2019-06-17 16:41:01 19 | */ 20 | @Service 21 | public class JavaService { 22 | 23 | @Resource 24 | private JavaMapper javaMapper; 25 | 26 | public void insert(Java java) { 27 | javaMapper.insert(java); 28 | } 29 | 30 | public void update(Java java) { 31 | javaMapper.update(java); 32 | } 33 | 34 | public Java getById(Long id) { 35 | return javaMapper.getById(id); 36 | } 37 | 38 | public List getByIdList(Collection idList) { 39 | return javaMapper.getByIdList(idList); 40 | } 41 | 42 | public List query(R params, Pageable pager) { 43 | return javaMapper.query(params, pager); 44 | } 45 | 46 | public Integer count(R params) { 47 | return javaMapper.count(params); 48 | } 49 | 50 | public Map getMapByIdList(Collection idList) { 51 | if (CollectionUtils.isEmpty(idList)) { 52 | return new HashMap<>(); 53 | } 54 | return Streamable.valueOf(this.getByIdList(idList)).uniqueGroupby(Java::getId).collect(); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/service/MarkService.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.service; 2 | 3 | import com.gomcarter.developer.dao.MarkMapper; 4 | import com.gomcarter.developer.entity.Mark; 5 | import com.gomcarter.frameworks.base.common.AssertUtils; 6 | import com.gomcarter.frameworks.base.pager.Pageable; 7 | import org.apache.commons.lang3.StringUtils; 8 | import org.springframework.stereotype.Service; 9 | 10 | import javax.annotation.Resource; 11 | import java.util.Collection; 12 | import java.util.List; 13 | 14 | /** 15 | * @author gomcarter on 2020-02-10 16:05:03 16 | */ 17 | @Service 18 | public class MarkService { 19 | 20 | @Resource 21 | private MarkMapper markMapper; 22 | 23 | public void insert(Mark mark) { 24 | markMapper.insert(mark); 25 | } 26 | 27 | public void insertNoisy(Mark mark) { 28 | markMapper.insertNoisy(mark); 29 | } 30 | 31 | public void update(Mark mark) { 32 | markMapper.update(mark); 33 | } 34 | 35 | public void updateCas(Mark mark) { 36 | markMapper.cas(mark); 37 | } 38 | 39 | public void updateCasNoisy(Mark mark) { 40 | markMapper.casNoisy(mark); 41 | } 42 | 43 | public Mark getById(Long id) { 44 | return markMapper.getById(id); 45 | } 46 | 47 | public List getByIdList(Collection idList) { 48 | return markMapper.getByIdList(idList); 49 | } 50 | 51 | public

List query(P params, Pageable pager) { 52 | return markMapper.query(params, pager); 53 | } 54 | 55 | public

Integer count(P params) { 56 | return markMapper.count(params); 57 | } 58 | 59 | public void create(Long interfaceId, String user, String mark) { 60 | AssertUtils.isTrue(StringUtils.isNotBlank(mark), "备注不能为空!"); 61 | this.markMapper.insert(new Mark() 62 | .setFkInterfacesId(interfaceId) 63 | .setUser(user) 64 | .setMark(mark) 65 | ); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/service/TestCaseHistoryService.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.service; 2 | 3 | import com.gomcarter.developer.dao.TestCaseHistoryMapper; 4 | import com.gomcarter.developer.entity.TestCaseHistory; 5 | import com.gomcarter.frameworks.base.pager.Pageable; 6 | import org.springframework.stereotype.Service; 7 | 8 | import javax.annotation.Resource; 9 | import java.util.Collection; 10 | import java.util.List; 11 | 12 | /** 13 | * @author 李银 on 2020-07-17 21:35:29 14 | */ 15 | @Service 16 | public class TestCaseHistoryService { 17 | 18 | @Resource 19 | private TestCaseHistoryMapper testCaseHistoryMapper; 20 | 21 | public TestCaseHistory insert(TestCaseHistory testCaseHistory) { 22 | testCaseHistoryMapper.insert(testCaseHistory); 23 | return testCaseHistory; 24 | } 25 | 26 | public void insertNoisy(TestCaseHistory testCaseHistory) { 27 | testCaseHistoryMapper.insertNoisy(testCaseHistory); 28 | } 29 | 30 | public void update(TestCaseHistory testCaseHistory) { 31 | testCaseHistoryMapper.update(testCaseHistory); 32 | } 33 | 34 | public void updateCas(TestCaseHistory testCaseHistory) { 35 | testCaseHistoryMapper.cas(testCaseHistory); 36 | } 37 | 38 | public void updateCasNoisy(TestCaseHistory testCaseHistory) { 39 | testCaseHistoryMapper.casNoisy(testCaseHistory); 40 | } 41 | 42 | public TestCaseHistory getById(Long id) { 43 | return testCaseHistoryMapper.getById(id); 44 | } 45 | 46 | public List getByIdList(Collection idList) { 47 | return testCaseHistoryMapper.getByIdList(idList); 48 | } 49 | 50 | public

List query(P params, Pageable pager) { 51 | return testCaseHistoryMapper.query(params, pager); 52 | } 53 | 54 | public

Integer count(P params) { 55 | return testCaseHistoryMapper.count(params); 56 | } 57 | 58 | public void delete(Long id) { 59 | this.testCaseHistoryMapper.deleteById(id); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/utils/DefaultResponseHandler.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.utils; 2 | 3 | import org.apache.http.HttpEntity; 4 | import org.apache.http.HttpResponse; 5 | import org.apache.http.HttpStatus; 6 | import org.apache.http.StatusLine; 7 | import org.apache.http.client.ClientProtocolException; 8 | import org.apache.http.client.ResponseHandler; 9 | import org.apache.http.util.EntityUtils; 10 | 11 | import java.io.IOException; 12 | import java.nio.charset.Charset; 13 | 14 | public class DefaultResponseHandler implements ResponseHandler { 15 | 16 | @Override 17 | public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException { 18 | StatusLine statusLine = response.getStatusLine(); 19 | 20 | if (statusLine.getStatusCode() != HttpStatus.SC_OK) { 21 | throw new RuntimeException("statusCode=" + statusLine.getStatusCode() + ",reason:" + statusLine.getReasonPhrase()); 22 | } 23 | 24 | HttpEntity entity = response.getEntity(); 25 | if (entity == null) { 26 | throw new ClientProtocolException("Response no content return."); 27 | } 28 | 29 | return EntityUtils.toString(entity, Charset.forName("UTF-8")); 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /java/src/main/java/com/gomcarter/developer/utils/Pair.java: -------------------------------------------------------------------------------- 1 | package com.gomcarter.developer.utils; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | import java.io.Serializable; 7 | 8 | @Data 9 | @Accessors(chain = true) 10 | public class Pair implements Serializable { 11 | 12 | private K key; 13 | 14 | private V value; 15 | 16 | public Pair(K key, V value) { 17 | this.key = key; 18 | this.value = value; 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /java/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %date [%thread] %-5level %C %logger{50}:%L - %msg%n 8 | 9 | 10 | 11 | 13 | ${logDir}/developer.log 14 | 15 | ${logDir}/logs/history/developer.%d{yyyy-MM-dd}.log.gz 16 | 30 17 | 18 | 19 | %date [%thread] %-5level %C %logger{50}:%L - %msg%n 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/CustomInterfacesItemMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/EndAuthMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/EndMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/FunctionMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/InterfacesMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | UPDATE 25 | interfaces 26 | SET 27 | deprecated=true 28 | WHERE 29 | fk_java_id=#{javaId} 30 | 31 | 32 | 35 | 36 | 39 | 40 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/InterfacesPackageItemMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | INSERT INTO interfaces_package_item 17 | (`interfaces_package_id`,`interfaces_id`) 18 | VALUES 19 | 20 | (#{packageId},#{_interface_id_}) 21 | 22 | 23 | 24 | 25 | delete from interfaces_package_item where interfaces_package_id = ${packageId} 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/InterfacesPackageMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/InterfacesVersionedMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/JavaMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/MarkMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/SettingOfUserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/TestCaseHistoryMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/TestCaseMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /java/src/main/resources/mybatis/UserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /java/src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /java/src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | 开发平台

-------------------------------------------------------------------------------- /java/src/main/resources/static/static/fonts/element-icons.535877f.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/static/fonts/element-icons.535877f.woff -------------------------------------------------------------------------------- /java/src/main/resources/static/static/fonts/element-icons.732389d.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/static/fonts/element-icons.732389d.ttf -------------------------------------------------------------------------------- /java/src/main/resources/static/static/img/bg.129e18e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/static/img/bg.129e18e.png -------------------------------------------------------------------------------- /java/src/main/resources/static/static/img/logo.8cab05f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/static/img/logo.8cab05f.png -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/11.9c7addf8992f5ffeaba1.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([11],{ENre:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i={name:"index",data:function(){return{width:1e3,height:600,myTableList:[{id:1,name:"name1"}]}},computed:{},methods:{onTreeSelectionChanged:function(e){}},components:{"v-tree":function(){return n.e(37).then(n.bind(null,"BBpc"))},"v-table-editor":function(){return n.e(39).then(n.bind(null,"ok35"))}},mounted:function(){}},a={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h4",{staticClass:"title"},[e._v("创建表")]),e._v(" "),n("hr"),e._v(" "),n("el-container",[n("el-main",{staticClass:"favorite-container",style:{width:"15%"}},[n("v-tree",{attrs:{datas:e.myTableList,id:"id",text:"name",onSelectionChanged:e.onTreeSelectionChanged,editable:!0}})],1),e._v(" "),n("el-aside",{staticClass:"interfaces-list-container",style:{width:"84%"}},[n("v-table-editor",{staticStyle:{position:"relative"},attrs:{width:e.width,height:e.height}})],1)],1)],1)},staticRenderFns:[]};var r=n("C7Lr")(i,a,!1,function(e){n("r5RT")},"data-v-8b852462",null);t.default=r.exports},r5RT:function(e,t){}}); 2 | //# sourceMappingURL=11.9c7addf8992f5ffeaba1.js.map -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/17.2095f5eb661f487e6013.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([17],{KOfc:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i("0Njg"),n=i("R2SV"),a=i("Dx6B"),l={name:"java",data:function(){var e=this;return{filter:{id:null,name:null},dataUrl:r.X,countUrl:r.W,params:{},toolbar:[{title:"新增",icon:"el-icon-plus",handler:this.edit}],columns:[{field:"action",header:"操作",width:130,actions:[{text:"编辑",handler:function(t){e.$router.push("/provider/list/edit/"+t.id)}}]},{field:"id",header:"序号",sort:"id",width:50},{field:"name",header:"模块名称",sort:"name",width:200},{field:"alias",header:"应用名",sort:"alias",width:200},{field:"createTime",header:"添加时间",sort:"create_time",width:200,formatter:function(e,t,i){return Object(n.b)(i)}}]}},mounted:function(){for(var e in a.b)this.columns.splice(4,0,{field:e,header:a.b[e]+"域名",width:180});this.action&&this.columns.push({field:"action",header:"操作",sort:"id",width:230,actions:this.action||[]})},methods:{search:function(){this.params=Object(n.g)(this.filter)},clear:function(){this.params={},this.filter={name:""}},edit:function(e){this.$router.push("/provider/list/edit")}},components:{"v-datagrid":function(){return i.e(32).then(i.bind(null,"mW4C"))}}},s={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("h4",{staticClass:"title"},[e._v("筛选条件")]),e._v(" "),i("hr"),e._v(" "),i("div",{staticClass:"filters"},[i("el-form",{attrs:{inline:!0,model:e.filter,"label-width":"6em"}},[i("el-form-item",{attrs:{label:"序号"}},[i("el-input",{attrs:{placeholder:"请输入序号"},nativeOn:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.search(t)}},model:{value:e.filter.id,callback:function(t){e.$set(e.filter,"id",t)},expression:"filter.id"}})],1),e._v(" "),i("el-form-item",{attrs:{label:"模块名称"}},[i("el-input",{attrs:{placeholder:"请输入模块名称"},nativeOn:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.search(t)}},model:{value:e.filter.name,callback:function(t){e.$set(e.filter,"name",t)},expression:"filter.name"}})],1),e._v(" "),i("el-form-item",[i("el-button",{attrs:{type:"primary",icon:"el-icon-search"},on:{click:e.search}},[e._v("搜索")]),e._v(" "),i("el-button",{attrs:{type:"info",icon:"el-icon-delete"},on:{click:e.clear}},[e._v("清空")])],1)],1)],1),e._v(" "),i("h4",{staticClass:"title"},[e._v("后端服务列表")]),e._v(" "),i("hr"),e._v(" "),i("v-datagrid",{attrs:{columns:e.columns,"data-url":e.dataUrl,"count-url":e.countUrl,params:e.params,toolbar:e.toolbar}})],1)},staticRenderFns:[]};var o=i("C7Lr")(l,s,!1,function(e){i("l4Ol")},"data-v-42817d58",null);t.default=o.exports},l4Ol:function(e,t){}}); 2 | //# sourceMappingURL=17.2095f5eb661f487e6013.js.map -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/22.0bb2356d936198667870.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([22],{a76X:function(t,e){},oF63:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s=a("aA9S"),n=a.n(s),r={name:"transfer",data:function(){return{data:{result:!0,title:"操作成功!",subtitle:null,back:"返回",buttons:[]}}},methods:{to:function(t){this.$router.push(t)}},mounted:function(){var t=void 0;try{var e=this.$route.params.data;t=e&&"string"==typeof e?JSON.parse(decodeURIComponent(e)):t||{}}catch(t){}this.data=n()({},this.data,t),document.documentElement.scrollTop=0,window.screenTop=0}},i={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h4",{staticClass:"title"},[t._v("操作结果")]),t._v(" "),a("hr"),t._v(" "),a("div",{staticClass:"transfer_container"},[a("div",{staticClass:"result-container"},[t.data.result?a("span",{staticClass:"el-icon-success success"}):a("span",{staticClass:"el-icon-error failed"})]),t._v(" "),a("br"),t._v(" "),a("br"),t._v(" "),a("h4",{staticClass:"center"},[a("b",[t._v(t._s(t.data.title||"操作成功!"))])]),t._v(" "),t.data.subtitle?a("div",{staticClass:"subtitle center"},[t._v(t._s(t.data.subtitle))]):t._e(),t._v(" "),a("br"),t._v(" "),a("br"),t._v(" "),a("div",{staticStyle:{margin:"10px"}},[t._l(t.data.buttons,function(e,s){return a("el-button",{key:s,attrs:{type:"primary"},on:{click:function(a){return t.to(e.link)}}},[t._v(t._s(e.text))])}),t._v(" "),0!=t.data.back?a("el-button",{attrs:{type:"info"},on:{click:function(e){return t.$router.go(-1)}}},[t._v(t._s(t.data.back||"返回"))]):t._e()],2)])])},staticRenderFns:[]};var c=a("C7Lr")(r,i,!1,function(t){a("a76X")},"data-v-190a2018",null);e.default=c.exports}}); 2 | //# sourceMappingURL=22.0bb2356d936198667870.js.map -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/24.ed30e718352e619ce964.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([24],{Fw7Z:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a={render:function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"index-main-left-content"})},staticRenderFns:[]};var c=n("C7Lr")({name:"index",data:function(){return{}},computed:{},methods:{},components:{},mounted:function(){}},a,!1,function(e){n("bHEh")},"data-v-108aa0a8",null);t.default=c.exports},bHEh:function(e,t){}}); 2 | //# sourceMappingURL=24.ed30e718352e619ce964.js.map -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/26.f783d01b2450e40dfe86.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([26],{BvPQ:function(e,t){},vVkX:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i("0Njg"),s={data:function(){return{times:1,width:1e3,height:618,disabled:!0,id:this.$route.params.id,name:null}},computed:{},methods:{init:function(){var e=this;this.id&&Object(n.O)(this.id).then(function(t){e.name=t.name;var i={testCaseId:e.id,workflow:JSON.parse(t.workflow),presetParams:JSON.parse(t.presetParams)||[]};setTimeout(function(){return e.$refs.runner.setData(i)},800)})},run:function(e){this.disabled=!0,this.times=this.times>1e3?1e3:this.times,this.$refs.runner.run(this.times,e)},saveHistory:function(){this.$refs.runner.saveHistory()},finished:function(){this.disabled=!1}},components:{"v-runner":function(){return i.e(34).then(i.bind(null,"V7zm"))}},mounted:function(){this.width=this.$el.clientWidth-100,this.init()}},r={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("h4",{staticClass:"title"},[e._v("执行用例")]),e._v(" "),i("hr"),e._v(" "),i("el-form",{ref:"edit",attrs:{"label-width":"8em"}},[i("el-form-item",{attrs:{label:"用例名称:"}},[e._v("\n "+e._s(e.name)+"\n ")]),e._v(" "),i("el-form-item",{staticStyle:{"margin-left":"-3em"}},[i("v-runner",{ref:"runner",staticStyle:{"line-height":"20px"},attrs:{width:e.width,height:e.height,finished:e.finished,prepared:e.finished}})],1),e._v(" "),i("el-form-item",[i("el-button",{attrs:{type:"info",icon:"el-icon-back"},on:{click:function(t){return e.$router.go(-1)}}},[e._v("返回")]),e._v(" "),i("el-input",{staticStyle:{width:"88px"},attrs:{placeholder:"运行次数",type:"number",max:1e3},model:{value:e.times,callback:function(t){e.times=t},expression:"times"}}),e._v(" "),i("el-button",{attrs:{type:"success",icon:e.disabled?"el-icon-loading":"el-icon-magic-stick",disabled:e.disabled},on:{click:function(t){return e.run(!1)}}},[e._v("运行")]),e._v(" "),i("el-button",{attrs:{type:"success",icon:e.disabled?"el-icon-loading":"el-icon-video-camera-solid",disabled:e.disabled},on:{click:function(t){return e.run(!0)}}},[e._v("mock运行")]),e._v(" "),i("el-button",{attrs:{type:"success",icon:e.disabled?"el-icon-loading":"el-icon-video-camera-solid",disabled:e.disabled},on:{click:e.saveHistory}},[e._v("保存执行结果")])],1)],1)],1)},staticRenderFns:[]};var a=i("C7Lr")(s,r,!1,function(e){i("BvPQ")},"data-v-0b32ee44",null);t.default=a.exports}}); 2 | //# sourceMappingURL=26.f783d01b2450e40dfe86.js.map -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/27.be51282c4f6c1de71cfe.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([27],{"7tIR":function(e,r){},fAfb:function(e,r,t){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var s=t("0Njg"),o=t("LLxk"),i=t("R2SV"),n={data:function(){return{remember:!1,forms:{username:"",password:""},rules:{username:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},disClick:!1}},computed:{},methods:{onSubmit:function(){var e=this;this.$refs.forms.validate(function(r){r&&(e.disClick=!0,Object(s.Y)(e.forms).then(function(r){var t=7200;e.remember&&(t=31536e4),Object(o.c)(r,t),e.disClick=!1,e.redirect?e.$router.push(decodeURIComponent(e.redirect)):e.$router.push("/")}).catch(function(){e.disClick=!1}))})}},mounted:function(){this.redirect=(Object(i.f)()||{}).redirect}},l={render:function(){var e=this,r=e.$createElement,s=e._self._c||r;return s("div",{staticClass:"login"},[s("div",{staticClass:"login-box"},[s("img",{staticClass:"logo",attrs:{src:t("dLd/"),alt:"developer center"}}),e._v(" "),s("p",{staticClass:"logo_title"},[e._v("开发者中心")]),e._v(" "),s("div",{staticClass:"form"},[s("el-form",{ref:"forms",attrs:{model:e.forms,"label-width":"0",rules:e.rules}},[s("el-form-item",{attrs:{prop:"username"}},[s("el-input",{attrs:{placeholder:"请输入账号"},nativeOn:{keypress:function(r){return!r.type.indexOf("key")&&e._k(r.keyCode,"enter",13,r.key,"Enter")?null:e.onSubmit(r)}},model:{value:e.forms.username,callback:function(r){e.$set(e.forms,"username",r)},expression:"forms.username"}})],1),e._v(" "),s("el-form-item",{attrs:{prop:"password"}},[s("el-input",{attrs:{type:"password",placeholder:"请输入密码"},nativeOn:{keypress:function(r){return!r.type.indexOf("key")&&e._k(r.keyCode,"enter",13,r.key,"Enter")?null:e.onSubmit(r)}},model:{value:e.forms.password,callback:function(r){e.$set(e.forms,"password",r)},expression:"forms.password"}})],1),e._v(" "),s("el-form-item",[s("el-checkbox",{staticStyle:{float:"left"},model:{value:e.remember,callback:function(r){e.remember=r},expression:"remember"}},[e._v("长期登录")])],1)],1),e._v(" "),s("el-row"),e._v(" "),s("el-button",{attrs:{type:"primary",disabled:e.disClick,icon:e.disClick?"el-icon-loading":""},on:{click:e.onSubmit}},[e._v(e._s(e.disClick?"登录中":"登录"))])],1)])])},staticRenderFns:[]};var a=t("C7Lr")(n,l,!1,function(e){t("7tIR")},"data-v-09524be6",null);r.default=a.exports}}); 2 | //# sourceMappingURL=27.be51282c4f6c1de71cfe.js.map -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/31.c830f4d0bc41e35c5912.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([31],{j9Pd:function(e,t,l){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=l("lC5x"),n=l.n(i),o=l("J0Oq"),a=l.n(o),s={name:"modalBase",props:{title:{type:String,default:"模态框"},lockScroll:{type:Boolean,default:!0},okText:{type:String,default:"确定"},cancelText:{type:String,default:"取消"},ok:{type:Function,default:null},cancel:{type:Function,default:null},width:{type:Number,default:600},height:{type:Number,default:null},autoClose:{type:Boolean,default:!1}},data:function(){return{visible:!1,disabled:!1}},methods:{confirm:function(){var e=this;return a()(n.a.mark(function t(){return n.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e.disabled=!0,!e.ok){t.next=8;break}return t.next=4,e.ok();case 4:!1!==t.sent&&e.autoClose&&(e.visible=!1),t.next=9;break;case 8:e.autoClose&&(e.visible=!1);case 9:e.disabled=!1;case 10:case"end":return t.stop()}},t,e)}))()},close:function(){this.cancel?!1!==this.cancel()&&(this.visible=!1):this.visible=!1},open:function(){this.visible=!0},toggle:function(){this.visible=!this.visible}}},c={render:function(){var e=this,t=e.$createElement,l=e._self._c||t;return l("el-dialog",{attrs:{title:e.title,visible:e.visible,width:null!=e.width?e.width+"px":"auto","lock-scroll":e.lockScroll},on:{"update:visible":function(t){e.visible=t}}},[l("hr"),e._v(" "),l("div",[e._t("body")],2),e._v(" "),e.okText||e.cancelText?l("div",{staticClass:"modal-footer",attrs:{slot:"footer"},slot:"footer"},[e._t("default",[e.cancelText?l("el-button",{attrs:{type:"info"},on:{click:e.close}},[e._v(e._s(e.cancelText))]):e._e(),e._v(" "),e.okText?l("el-button",{attrs:{type:"primary",disabled:e.disabled,icon:e.disabled?"el-icon-loading":""},on:{click:e.confirm}},[e._v("\n "+e._s(e.okText)+"\n ")]):e._e()])],2):e._e()])},staticRenderFns:[]};var r=l("C7Lr")(s,c,!1,function(e){l("tFhY")},"data-v-2bc75620",null);t.default=r.exports},tFhY:function(e,t){}}); 2 | //# sourceMappingURL=31.c830f4d0bc41e35c5912.js.map -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/35.31a3c801df3b1e3fcaba.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([35],{"3vG1":function(t,e){},Kq1y:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r={name:"parameter",props:{json:{type:Array,default:null}},data:function(){return{data:[]}},mounted:function(){this.init()},methods:{init:function(){var t=this;this.data=this.json.flatMap(function(e){return"Object"!==e.type||e.body||(e.key=void 0),t.generateChild(e,void 0)})},generateBodyComment:function(t){var e=this;if("List"===t.type)return[this.generateBodyComment(t.children[0])];if("Object"===t.type){var n={};return t.children=t.children||[],t.children.forEach(function(t){n[t.key]=e.generateBodyComment(t)}),n}return void 0===t.type?"...":"void"===t.type?"无":(t.comment?t.comment+"; ":"")+" 数据类型:"+t.type+"; "+(t.notNull?"此项一定不为空;":"")},generateChild:function(t,e){var n=this,r=(e?e+".":"")+(t.key||"");if(t.body){var o=t.comment||"";return[{key:r,notNull:t.notNull,comment:o,body:this.generateBodyComment(t),defaults:t.defaults,type:"body"}]}if("List"===t.type){var l=[{key:r,notNull:t.notNull,comment:t.comment,defaults:t.defaults,type:"List<"+(t.children[0].type||"Object")+">"}];return"Object"!==t.children[0].type&&"List"!==t.children[0].type||(l=l.concat((t.children[0].children||[]).flatMap(function(t){return n.generateChild(t,r)}))),l}return"Object"===t.type?(t.children||[]).flatMap(function(t){return n.generateChild(t,r)}):{key:r,notNull:t.notNull,comment:t.comment,defaults:t.defaults,type:t.type}}},components:{"v-jsonformatter":function(){return n.e(33).then(n.bind(null,"9YOq"))}}},o={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("el-table",{staticStyle:{width:"100%","margin-bottom":"20px"},attrs:{data:t.data||[],"row-key":"key",border:"","default-expand-all":""}},[n("el-table-column",{attrs:{prop:"key",label:"参数名",width:"150"}}),t._v(" "),n("el-table-column",{attrs:{prop:"type",label:"类型",width:"120"}}),t._v(" "),n("el-table-column",{attrs:{prop:"notNull",label:"是否必填",formatter:function(t,e,n){return n?"是":"否"},width:"120"}}),t._v(" "),n("el-table-column",{attrs:{prop:"defaults",label:"默认值",formatter:function(t,e,n){return void 0===n?"":n+""},width:"100"}}),t._v(" "),n("el-table-column",{attrs:{prop:"comment",label:"说明",width:"800"},scopedSlots:t._u([{key:"default",fn:function(e){return[n("div",{domProps:{innerHTML:t._s(e.row.comment)}}),t._v(" "),e.row.body?n("v-jsonformatter",{attrs:{json:e.row.body,minHeight:100}}):t._e()]}}])})],1)],1)},staticRenderFns:[]};var l=n("C7Lr")(r,o,!1,function(t){n("3vG1")},"data-v-3dc81fa4",null);e.default=l.exports}}); 2 | //# sourceMappingURL=35.31a3c801df3b1e3fcaba.js.map -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/46.5fcccc975feda255736e.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([46],{vkFf:function(e,t){},zmcw:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("aA9S"),r=n.n(o),i={props:{onOk:{type:Function,default:function(){}}},data:function(){return{nodeId:null,source:[],target:[],node:{sleep:0,javascript:null},hasTarget:!1,hasSource:!1}},methods:{open:function(e,t){this.target=t.filter(function(t){return t.getModel().source===e.id}).map(function(e){return e.getModel().id})||[],this.source=t.filter(function(t){return t.getModel().target===e.id}).map(function(e){return e.getModel().id})||[],this.hasTarget=this.target.length>0,this.hasSource=this.source.length>0;var n=e.data||{};this.nodeId="(上游节点:"+this.source+";下游节点:"+this.target+")",this.node.javascript=n.javascript,this.node.sleep=n.sleep,this.$refs.editConditionDialog.open()},confirm:function(){var e=this;this.$refs.form.validate(function(t){t&&(e.onOk&&e.onOk(r()({},e.node)),e.$refs.editConditionDialog.close())})}},components:{"v-dialog":function(){return n.e(31).then(n.bind(null,"j9Pd"))}}},a={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-dialog",{ref:"editConditionDialog",attrs:{title:"配置条件:"+e.nodeId,ok:e.confirm,width:1e3}},[n("el-form",{ref:"form",staticClass:"edit-node-dialog",attrs:{slot:"body",model:e.node,"label-width":"8em"},slot:"body"},[n("el-form-item",{attrs:{label:"休眠"}},[n("el-input",{staticStyle:{display:"inline-block",width:"100px"},attrs:{placeholder:"0"},model:{value:e.node.sleep,callback:function(t){e.$set(e.node,"sleep",t)},expression:"node.sleep"}}),e._v(" 秒之后运行\n ")],1),e._v(" "),n("el-form-item",{attrs:{label:"条件处理脚本:"}},[n("el-input",{attrs:{placeholder:(e.hasSource?"您可以使用("+e.source.map(function(e){return"$"+e}).join(",")+")来获取上游返回值,":"")+"\n"+(e.hasTarget?"并选择["+e.target.map(function(e){return" '"+e+"' "}).join(",")+"]中任意一个或者多个作为返回值,表示下游执行哪条线路":"")+"\n如不做任何处理,下游每条分支都将被运行,没有下游则说明都不执行,举例:\n\nif (xx === yy) {\n return ["+(e.hasTarget?" '"+e.target[0]+"' ":"")+"]\n} else {\n return [ "+e.target.map(function(e){return" '"+e+"' "}).join(",")+" ]\n}",rows:15,type:"textarea"},model:{value:e.node.javascript,callback:function(t){e.$set(e.node,"javascript",t)},expression:"node.javascript"}})],1)],1)],1)],1)},staticRenderFns:[]};var s=n("C7Lr")(i,a,!1,function(e){n("vkFf")},"data-v-195ca8f6",null);t.default=s.exports}}); 2 | //# sourceMappingURL=46.5fcccc975feda255736e.js.map -------------------------------------------------------------------------------- /java/src/main/resources/static/static/js/manifest.a87ede5bbd71abf9bf31.js: -------------------------------------------------------------------------------- 1 | !function(e){var c=window.webpackJsonp;window.webpackJsonp=function(a,n,r){for(var t,b,o,i=0,u=[];i 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime", "transform-decorators-legacy"] 12 | } 13 | -------------------------------------------------------------------------------- /web/.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 | -------------------------------------------------------------------------------- /web/.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | -------------------------------------------------------------------------------- /web/.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | // allow async-await 25 | 'generator-star-spacing': 'off', 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /web/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | -------------------------------------------------------------------------------- /web/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /web/README.md: -------------------------------------------------------------------------------- 1 | # cruise 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | ``` 20 | 21 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 22 | -------------------------------------------------------------------------------- /web/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, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 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 | -------------------------------------------------------------------------------- /web/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 | -------------------------------------------------------------------------------- /web/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 | -------------------------------------------------------------------------------- /web/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 | -------------------------------------------------------------------------------- /web/config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /web/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/favicon.ico -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 开发平台 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /web/src/App.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 33 | 34 | 38 | -------------------------------------------------------------------------------- /web/src/assets/css/mixin.scss: -------------------------------------------------------------------------------- 1 | $bc: #4063FF; 2 | $fc:#fff; 3 | 4 | // 背景图片地址和大小 5 | @mixin bis($url) { 6 | background-image: url($url); 7 | background-repeat: no-repeat; 8 | background-size: 100% 100%; 9 | } 10 | 11 | @mixin borderRadius($radius) { 12 | -webkit-border-radius: $radius; 13 | -moz-border-radius: $radius; 14 | -ms-border-radius: $radius; 15 | -o-border-radius: $radius; 16 | border-radius: $radius; 17 | } 18 | 19 | //定位全屏 20 | @mixin allcover{ 21 | position:absolute; 22 | top:0; 23 | right:0; 24 | bottom: 0; 25 | left: 0; 26 | } 27 | 28 | //定位上下左右居中 29 | @mixin center { 30 | position: absolute; 31 | top: 50%; 32 | left: 50%; 33 | transform: translate(-50%, -50%); 34 | } 35 | 36 | //定位上下居中 37 | @mixin ct { 38 | position: absolute; 39 | top: 50%; 40 | transform: translateY(-50%); 41 | } 42 | 43 | //定位上下居中 44 | @mixin cl { 45 | position: absolute; 46 | left: 50%; 47 | transform: translateX(-50%); 48 | } 49 | 50 | //宽高 51 | @mixin wh($width, $height){ 52 | width: $width; 53 | height: $height; 54 | } 55 | 56 | @mixin shadow($xIndex, $yIndex, $shadow, $color) { 57 | -webkit-box-shadow: $xIndex $yIndex $shadow $color; 58 | box-shadow:$xIndex $yIndex $shadow $color; 59 | } 60 | 61 | //字体大小、行高、字体 62 | @mixin font($size, $line-height, $family: 'Microsoft YaHei') { 63 | font: #{$size}/#{$line-height} $family; 64 | } 65 | 66 | //字体大小,颜色 67 | @mixin sc($size, $color){ 68 | font-size: $size; 69 | color: $color; 70 | } 71 | 72 | //flex 布局和 子元素 对其方式 73 | @mixin fj($type: space-between){ 74 | display: flex; 75 | justify-content: $type; 76 | } 77 | -------------------------------------------------------------------------------- /web/src/assets/font_icons/fonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/font_icons/fonts.png -------------------------------------------------------------------------------- /web/src/assets/font_icons/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/font_icons/fonts/icomoon.eot -------------------------------------------------------------------------------- /web/src/assets/font_icons/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/font_icons/fonts/icomoon.ttf -------------------------------------------------------------------------------- /web/src/assets/font_icons/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/font_icons/fonts/icomoon.woff -------------------------------------------------------------------------------- /web/src/assets/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/bg.png -------------------------------------------------------------------------------- /web/src/assets/img/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/logo.jpg -------------------------------------------------------------------------------- /web/src/assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/logo.png -------------------------------------------------------------------------------- /web/src/assets/img/qa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/qa.png -------------------------------------------------------------------------------- /web/src/assets/img/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/upload.png -------------------------------------------------------------------------------- /web/src/components/aggregation-editor/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .dependency-dialog .el-form-item { 4 | margin-bottom: 16px; 5 | } 6 | 7 | .agg-editor { 8 | position: relative; 9 | } 10 | 11 | .param-value { 12 | display: inline-block; 13 | width: 55% !important; 14 | } 15 | 16 | .param-key { 17 | display: inline-block; 18 | width: 20% !important; 19 | } 20 | 21 | .graph-container { 22 | text-align: center; 23 | padding: 5px 0; 24 | border-radius: 4px; 25 | border: 1px solid #DCDFE6; 26 | } 27 | 28 | .data-container { 29 | padding: 20px; 30 | height: 100%; 31 | border-radius: 4px; 32 | margin-left: 20px; 33 | border: 1px solid #DCDFE6; 34 | } 35 | 36 | .function-selector { 37 | position: absolute; 38 | display: none; 39 | width: 200px; 40 | } 41 | 42 | .mask { 43 | background: #0004; 44 | position: absolute; 45 | top: 0; 46 | left: 0; 47 | width: 100%; 48 | height: 100%; 49 | z-index: 999; 50 | } 51 | 52 | .create-button { 53 | position: absolute; 54 | margin: auto; 55 | top: 0; 56 | bottom: 0; 57 | left: 0; 58 | right: 0; 59 | height: 46px; 60 | } 61 | 62 | .work-flow-context-menu { 63 | position: absolute; 64 | list-style-type: none; 65 | left: -10000px; 66 | background-color: rgba(255, 255, 255, 0.9); 67 | border: 1px solid #e2e2e2; 68 | border-radius: 4px; 69 | font-size: 13px; 70 | color: #999; 71 | user-select: none; 72 | min-width: 70px; 73 | } 74 | 75 | .work-flow-context-menu li { 76 | cursor: pointer; 77 | list-style-type: none; 78 | list-style: none; 79 | margin-left: 0px; 80 | line-height: 30px; 81 | padding: 0 10px; 82 | } 83 | 84 | .work-flow-context-menu li:hover { 85 | color: #000; 86 | background: #eeee; 87 | font-weight: bold; 88 | } 89 | 90 | -------------------------------------------------------------------------------- /web/src/components/condition-editor/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .edit-node-dialog .el-form-item { 4 | margin-bottom: 16px; 5 | } 6 | 7 | .param-value { 8 | width: 450px !important; 9 | } 10 | 11 | .param-key { 12 | width: 230px !important; 13 | } 14 | 15 | .param-label { 16 | width: 50px !important; 17 | } 18 | -------------------------------------------------------------------------------- /web/src/components/condition-editor/index.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 77 | 78 | 81 | -------------------------------------------------------------------------------- /web/src/components/datagrid/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | /*样式在下面完成*/ 4 | .datagrid-container { 5 | 6 | } 7 | 8 | .datagrid-title { 9 | font-size: 16px; 10 | font-weight: 600; 11 | padding-bottom: 10px; 12 | color: #6d6d6d; 13 | } 14 | 15 | .datagrid-title-text { 16 | padding: 15px; 17 | border-left: 3px solid #4786ff; 18 | } 19 | 20 | .datagrid-toolbar { 21 | width: 100%; 22 | height: 60px; 23 | padding: 15px; 24 | border-bottom: none; 25 | } 26 | 27 | .datagrid-toolbar-button { 28 | } 29 | 30 | .datagrid-checkbox { 31 | width: 20px; 32 | zoom: 1.5; 33 | } 34 | 35 | .datagrid-frame { 36 | border-spacing: 0; 37 | border-collapse: collapse; 38 | background-color: transparent; 39 | } 40 | 41 | .datagrid-header { 42 | font-size: 15px; 43 | padding: 15px; 44 | } 45 | 46 | .datagrid-header-row { 47 | border: 1px solid #ddd; 48 | } 49 | 50 | .datagrid-header-cell { 51 | //text-align: center; 52 | line-height: 1.42857143; 53 | cursor: pointer; 54 | padding: 15px; 55 | white-space: nowrap; 56 | text-align: left; 57 | } 58 | 59 | .datagrid-header-check, .datagrid-row-check{ 60 | width: 30px; 61 | text-align: center; 62 | padding-left: 10px; 63 | } 64 | 65 | .datagrid-body { 66 | text-align: left; 67 | } 68 | 69 | .datagrid-body-row, .datagrid-body-row-child { 70 | border: 1px solid #ddd; 71 | } 72 | 73 | .datagrid-body-row:hover { 74 | background: rgba(230, 230, 230, 0.31) !important; 75 | } 76 | 77 | .datagrid-body-td { 78 | padding: 15px; 79 | } 80 | 81 | .datagrid-body-cell { 82 | max-height: 80px; 83 | overflow-y: auto; 84 | } 85 | .datagrid-body-cell::-webkit-scrollbar { 86 | width: 3px; 87 | } 88 | 89 | .datagrid-body-cell::-webkit-scrollbar-thumb { 90 | background: rgba(68, 54, 54, 0.1); 91 | } 92 | 93 | .datagrid-body-cell::-webkit-scrollbar-track { 94 | background: rgba(0, 0, 0, 0.11); 95 | } 96 | 97 | .datagrid-action { 98 | white-space: nowrap; 99 | text-decoration: none; 100 | cursor: pointer; 101 | color: darkblue; 102 | margin: 0 7px; 103 | } 104 | 105 | .datagrid-footer { 106 | border: 1px solid #ddd; 107 | background-color: #f1f1f1; 108 | } 109 | 110 | .datagrid-row-expander-all, .datagrid-row-expander { 111 | cursor: pointer; 112 | width: 46px; 113 | 114 | span { 115 | display: inline-block; 116 | padding: 15px; 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /web/src/components/dialog/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .modal-footer { 4 | padding: 15px 0 0 0; 5 | } 6 | -------------------------------------------------------------------------------- /web/src/components/frame/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .header { 4 | position: fixed; 5 | z-index: 100; 6 | background: #4063ff; 7 | background-size: 100% 100%; 8 | @include wh(100%, 60px); 9 | } 10 | 11 | .logo{ 12 | height: 100%; 13 | padding: 12px; 14 | } 15 | 16 | .link { 17 | color: #eee; 18 | display: block; 19 | width: 100%; 20 | height: 100%; 21 | } 22 | 23 | .link.router-link-exact-active.router-link-active { 24 | color: gold !important; 25 | } 26 | 27 | .menu { 28 | display: inline-block; 29 | } 30 | 31 | 32 | .user { 33 | display: inline-block; 34 | height: 100%; 35 | float: right; 36 | line-height: 60px; 37 | margin-right: 20px; 38 | } 39 | 40 | .el-dropdown-link:hover { 41 | color: #ffffff8c !important; 42 | } 43 | -------------------------------------------------------------------------------- /web/src/components/image/big.vue: -------------------------------------------------------------------------------- 1 | 14 | 37 | 88 | -------------------------------------------------------------------------------- /web/src/components/image/index.vue: -------------------------------------------------------------------------------- 1 | 12 | 56 | 87 | -------------------------------------------------------------------------------- /web/src/components/interfaces-selector/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .edit-node-dialog .el-form-item { 4 | margin-bottom: 16px; 5 | } 6 | 7 | .param-value { 8 | width: 450px !important; 9 | } 10 | 11 | .param-key { 12 | width: 230px !important; 13 | } 14 | 15 | .param-label { 16 | width: 50px !important; 17 | } 18 | -------------------------------------------------------------------------------- /web/src/components/node-editor/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .edit-node-dialog .el-form-item { 4 | margin-bottom: 16px; 5 | } 6 | 7 | .param-value { 8 | width: 450px !important; 9 | } 10 | 11 | .param-key { 12 | width: 230px !important; 13 | } 14 | 15 | .param-label { 16 | width: 50px; 17 | } 18 | -------------------------------------------------------------------------------- /web/src/components/pager/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | .pager { 3 | font-size: 15px; 4 | color: #666666; 5 | margin: 10px 10px; 6 | box-sizing: border-box; 7 | text-align: right; 8 | -moz-user-select: none; 9 | -khtml-user-select: none; 10 | user-select: none; 11 | } 12 | 13 | .pager-rows { 14 | width: 70px; 15 | } 16 | 17 | .pager-rows-option { 18 | 19 | } 20 | 21 | .pager-btn-enable { 22 | background-color: white; 23 | min-width: 30px; 24 | height: 28px; 25 | border: 1px solid #0073A9 !important; 26 | text-align: center; 27 | margin: 0 4px; 28 | cursor: pointer; 29 | line-height: 27px; 30 | color: #0073A9; 31 | font-size: 13px; 32 | display: inline-block; 33 | } 34 | 35 | .pager-btn-enable:hover { 36 | background-color: #3674F4; 37 | border-color: #3674F4; 38 | color: #FFFFFF !important; 39 | } 40 | 41 | .pager-btn-disable { 42 | color: gray !important; 43 | background-color: #f2f6f7 !important; 44 | min-width: 30px; 45 | height: 28px; 46 | border: 1px solid #cacaca !important; 47 | text-align: center; 48 | margin: 0 4px; 49 | cursor: pointer; 50 | line-height: 28px; 51 | font-size: 13px; 52 | display: inline-block; 53 | } 54 | 55 | .pager-first { 56 | width: 50px; 57 | } 58 | 59 | .pager-previous { 60 | width: 70px; 61 | } 62 | 63 | .pager-current { 64 | width: 60px; 65 | text-align: center; 66 | &::-webkit-outer-spin-button, 67 | &::-webkit-inner-spin-button { 68 | -webkit-appearance: none !important; 69 | } 70 | -webkit-appearance: none; 71 | -moz-appearance:textfield; 72 | -webkit-box-sizing: border-box; 73 | 74 | border-radius: 3px; 75 | line-height: 20px; 76 | background: #fff none; 77 | border: 1px solid #dcdfe6; 78 | box-sizing: border-box; 79 | color: #606266; 80 | display: inline-block; 81 | font-size: inherit; 82 | outline: 0; 83 | -webkit-transition: border-color .2s cubic-bezier(.645,.045,.355,1); 84 | transition: border-color .2s cubic-bezier(.645,.045,.355,1); 85 | } 86 | 87 | .pager-next { 88 | width: 70px; 89 | } 90 | 91 | .pager-last { 92 | width: 50px; 93 | } 94 | 95 | .pager-page { 96 | margin: 0 10px; 97 | } 98 | 99 | .pager-total { 100 | margin: 0 10px; 101 | } 102 | 103 | .pager-page-num { 104 | color: #0073A9; 105 | margin: 0 5px; 106 | } 107 | 108 | .pager-total-num { 109 | color: #0073A9; 110 | margin: 0 5px; 111 | } 112 | -------------------------------------------------------------------------------- /web/src/components/parameter-input/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .param-value { 4 | width: 55% !important; 5 | } 6 | 7 | .param-script { 8 | width: 35% !important; 9 | } 10 | 11 | .param-arguments { 12 | width: 20% !important; 13 | } 14 | 15 | .param-key { 16 | width: 20% !important; 17 | } 18 | -------------------------------------------------------------------------------- /web/src/components/parameter/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | -------------------------------------------------------------------------------- /web/src/components/runner/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .runner-container { 4 | border-radius: 4px; 5 | border: 1px solid #DCDFE6; 6 | padding: 0; 7 | } 8 | 9 | .el-aside { 10 | border-radius: 4px; 11 | border: 1px solid #DCDFE6; 12 | padding: 10px; 13 | margin-left: 10px; 14 | } 15 | 16 | .el-form-item .el-form-item { 17 | margin-bottom: 22px; 18 | } 19 | 20 | .simple { 21 | display: inline-block; 22 | width: 20px; 23 | height: 20px; 24 | } 25 | 26 | .waiting { 27 | background: yellow; 28 | } 29 | 30 | .running { 31 | background: green; 32 | } 33 | 34 | .success { 35 | background: springgreen; 36 | } 37 | 38 | .failed { 39 | background: red; 40 | } 41 | 42 | .ignore { 43 | background: lightgray; 44 | } 45 | 46 | .warning { 47 | background: orange; 48 | } 49 | 50 | .runner-logger { 51 | word-break: break-word; 52 | } 53 | 54 | .running-history { 55 | text-align: center; 56 | padding: 5px 0; 57 | border-radius: 4px; 58 | border: 1px solid #DCDFE6; 59 | 60 | div { 61 | cursor: pointer; 62 | display: block; 63 | padding: 10px; 64 | 65 | &:hover { 66 | color: red; 67 | background: #ccc; 68 | } 69 | } 70 | 71 | .selected { 72 | background: #eee; 73 | } 74 | 75 | .el-icon-circle-check { 76 | color: green; 77 | } 78 | 79 | .el-icon-circle-close { 80 | color: red; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /web/src/components/selector/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{ 3 | right: 6px; 4 | } 5 | 6 | -------------------------------------------------------------------------------- /web/src/components/table-editor/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .function-selector { 4 | position: absolute; 5 | display: none; 6 | width: 200px; 7 | } 8 | 9 | .work-flow-context-menu { 10 | position: absolute; 11 | list-style-type: none; 12 | left: -10000px; 13 | background-color: rgba(255, 255, 255, 0.9); 14 | border: 1px solid #e2e2e2; 15 | border-radius: 4px; 16 | font-size: 13px; 17 | color: #999; 18 | user-select: none; 19 | min-width: 70px; 20 | } 21 | 22 | .work-flow-context-menu li { 23 | cursor: pointer; 24 | list-style-type: none; 25 | list-style: none; 26 | margin-left: 0px; 27 | line-height: 30px; 28 | padding: 0 10px; 29 | } 30 | 31 | .work-flow-context-menu li:hover { 32 | color: #000; 33 | background: #eeee; 34 | font-weight: bold; 35 | } 36 | 37 | -------------------------------------------------------------------------------- /web/src/components/table-output-editor/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .edit-node-dialog .el-form-item { 4 | margin-bottom: 16px; 5 | } 6 | 7 | .param-value { 8 | width: 450px !important; 9 | } 10 | 11 | .param-key { 12 | width: 230px !important; 13 | } 14 | 15 | .param-label { 16 | width: 50px; 17 | } 18 | -------------------------------------------------------------------------------- /web/src/components/table-selector/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .edit-node-dialog .el-form-item { 4 | margin-bottom: 16px; 5 | } 6 | 7 | .param-value { 8 | width: 450px !important; 9 | } 10 | 11 | .param-key { 12 | width: 230px !important; 13 | } 14 | 15 | .param-label { 16 | width: 50px; 17 | } 18 | -------------------------------------------------------------------------------- /web/src/components/tree/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .tree-node { 4 | line-height: 22px; 5 | outline: none; 6 | } 7 | 8 | .editor { 9 | padding: 4px; 10 | border: 1px solid #ddd; 11 | } 12 | 13 | /*.tree-node:hover { 14 | background-color: #f5f7fa; 15 | }*/ 16 | .list-group-item { 17 | margin-bottom: -1px; 18 | background-color: #fff; 19 | border: 1px solid #ddd; 20 | cursor: pointer; 21 | } 22 | 23 | .list-group-item .editable { 24 | visibility: hidden; 25 | position: absolute; 26 | right: 10px; 27 | line-height: 22px; 28 | } 29 | 30 | .list-group-item:not(.node-disabled):hover { 31 | background-color: #F5F5F5; 32 | border: 1px solid #ddd; 33 | 34 | .editable { 35 | visibility: visible; 36 | } 37 | } 38 | 39 | .list-group-item:focus { 40 | border: 1px solid #ddd; 41 | background-color: #F5F5F5; 42 | } 43 | 44 | .active { 45 | border: 1px solid #ddd; 46 | color: #FFFFFF !important; 47 | background-color: #428bca !important; 48 | } 49 | 50 | .icon { 51 | margin-right: 5px; 52 | font-weight: bold; 53 | } 54 | 55 | .list-group-item { 56 | margin-bottom: -1px; 57 | background-color: #fff; 58 | border: 1px solid #ddd; 59 | cursor: pointer; 60 | } 61 | 62 | .tree-node { 63 | line-height: 22px; 64 | outline: none; 65 | } 66 | 67 | .list-group-item:first-child { 68 | border-top-left-radius: 4px; 69 | border-top-right-radius: 4px; 70 | } 71 | 72 | .list-group-item { 73 | position: relative; 74 | display: block; 75 | padding: 10px 15px; 76 | margin-bottom: -1px; 77 | background-color: #fff; 78 | border: 1px solid #ddd; 79 | } 80 | -------------------------------------------------------------------------------- /web/src/components/workflow/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .function-selector { 4 | position: absolute; 5 | display: none; 6 | width: 200px; 7 | } 8 | 9 | .work-flow-context-menu { 10 | position: absolute; 11 | list-style-type: none; 12 | left: -10000px; 13 | background-color: rgba(255, 255, 255, 0.9); 14 | border: 1px solid #e2e2e2; 15 | border-radius: 4px; 16 | font-size: 13px; 17 | color: #999; 18 | user-select: none; 19 | min-width: 70px; 20 | } 21 | 22 | .work-flow-context-menu li { 23 | cursor: pointer; 24 | list-style-type: none; 25 | list-style: none; 26 | margin-left: 0px; 27 | line-height: 30px; 28 | padding: 0 10px; 29 | } 30 | 31 | .work-flow-context-menu li:hover { 32 | color: #000; 33 | background: #eeee; 34 | font-weight: bold; 35 | } 36 | 37 | -------------------------------------------------------------------------------- /web/src/config/api/data-api.js: -------------------------------------------------------------------------------- 1 | 2 | const tableMap = { 3 | 1: { 4 | name: '订单主表', 5 | schema: 'order' 6 | }, 7 | 2: { 8 | name: '订单商品主表', 9 | schema: 'order' 10 | }, 11 | 3: { 12 | name: '商品主表', 13 | schema: 'order' 14 | }, 15 | 4: { 16 | name: '优惠券主表', 17 | schema: 'order' 18 | } 19 | } 20 | 21 | export const tableListApi = (params) => { 22 | return Promise.resolve(Object.entries(tableMap) 23 | .map(s => { 24 | return { 25 | id: +s[0], 26 | name: s[1].name 27 | } 28 | }) 29 | ) 30 | } 31 | 32 | export const tableInfoApi = (tableId) => { 33 | return Promise.resolve({ 34 | columns: [{ 35 | name: '字段' + 1, 36 | column: 'column' + 1, 37 | type: '类型', 38 | comment: '备注' + Date.now() 39 | }, { 40 | name: '字段' + 2, 41 | column: 'column' + 2, 42 | type: '类型', 43 | comment: '备注' + Date.now() 44 | }, { 45 | name: '字段' + 3, 46 | column: 'column' + 3, 47 | type: '类型', 48 | comment: '备注' + Date.now() 49 | }, { 50 | name: '字段' + 4, 51 | column: 'column' + 4, 52 | type: '类型', 53 | comment: '备注' + Date.now() 54 | }], 55 | id: tableId, 56 | name: tableMap[tableId].name, 57 | description: '主表,相关的数据' 58 | }) 59 | } 60 | -------------------------------------------------------------------------------- /web/src/config/api/env.js: -------------------------------------------------------------------------------- 1 | export const INSERV_URL = '/' 2 | -------------------------------------------------------------------------------- /web/src/config/api/http.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import qs from 'query-string' 3 | import { removeBlank } from '@/config/utils' 4 | import { that } from '../../main.js' 5 | 6 | // 表示跨域请求时是否带cookie 7 | axios.defaults.withCredentials = true 8 | // 超时时间20s 9 | axios.defaults.timeout = 15000 10 | // 11 | axios.defaults.crossDomain = true 12 | 13 | // 添加请求拦截器 14 | axios.interceptors.request.use((config) => { 15 | const customHeaders = config.customHeaders || (config.params && config.params.customHeaders) 16 | // console.log(customHeaders) 17 | if (config.params) { 18 | delete config.params.customHeaders 19 | } 20 | 21 | if (customHeaders && customHeaders.length > 0) { 22 | customHeaders.filter(n => n.key).forEach(h => { 23 | config.headers[h.key] = h.value 24 | }) 25 | } 26 | if (config.cookie === false || (config.params && config.params.cookie === false)) { 27 | config.withCredentials = false 28 | } 29 | 30 | config.paramsSerializer = params => qs.stringify(params) 31 | // 在发送请求之前做些什么 32 | if (['post', 'put', 'patch'].indexOf(config.method) >= 0) { 33 | if (config.type === 'updoad') { 34 | // do nothing 35 | } else if (config.type === 'json') { 36 | if (typeof config.data !== 'string') { 37 | config.data = JSON.stringify(config.data) 38 | } 39 | config.headers['Content-type'] = 'application/json' 40 | } else if (config.type === 'raw') { 41 | config.headers['Content-type'] = 'html/text' 42 | } else { 43 | config.data = qs.stringify(removeBlank(config.data)) 44 | config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8' 45 | } 46 | } else if (config.method === 'get') { 47 | config.params = removeBlank(config.params) 48 | } 49 | return config 50 | }, error => Promise.reject(error)) 51 | 52 | let alerted = false 53 | 54 | axios.interceptors.response.use((response) => { 55 | if (response.config.notice !== false) { 56 | // 判断http状态码 57 | if ([200, 304, 400].indexOf(response.status) === -1) { 58 | that.$alert('网络异常!', '提示', { type: 'error' }) 59 | } else if (response.data.code === -401) { 60 | if (!alerted) { 61 | alerted = true 62 | that.$alert('登录超时', '提示', { type: 'error' }).then(() => that.$router.push('/login')) 63 | 64 | setTimeout(() => { 65 | alerted = false 66 | }, 5000) 67 | } 68 | } else if (response.data.code !== 0) { 69 | that.$alert(response.data.message || '请求失败!', '提示', { type: 'error' }) 70 | } 71 | } 72 | return response 73 | }, error => Promise.reject(error)) 74 | 75 | export const xhr = axios 76 | -------------------------------------------------------------------------------- /web/src/config/cookie.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | const DEFAULT_CONFIG = { 4 | path: '/', 5 | expires: null, 6 | secure: null, 7 | }; 8 | 9 | /** 10 | * 11 | * @param key 12 | * @param value 13 | * @param opts : { 14 | * expires : 过期时间当前时间往后多少秒(整数),不设置表示基于session级别(默认基于session) 15 | * domain : 作用域, 如果不传,区当前浏览器的一级域名; 16 | * path:路径(默认根目录,但是如果cookie只希望在部分目录下才生效,可以利用此字段), 默认根目录(domain下全网站生效) 17 | * secure: true => https下才会生效,false=>http下不生效; 默认false 18 | * } 19 | * 或者 opts直接是 expires(过期时间) 20 | */ 21 | export const setCookie = (key, value, opts) => { 22 | if (typeof opts === 'number') { 23 | opts = { expires: opts }; 24 | } 25 | 26 | opts = opts || ({ 27 | expires: 7200 28 | }); 29 | 30 | if (typeof opts.expires === 'number') { 31 | const date = new Date(); 32 | date.setSeconds(date.getSeconds() + opts.expires); 33 | opts.expires = date.toGMTString(); 34 | } 35 | 36 | const optString = Object.entries(Object.assign(DEFAULT_CONFIG, opts)) 37 | .filter(s => s[1] != null) 38 | .map(s => `${s[0]}=${s[1]}`) 39 | .join('; '); 40 | 41 | document.cookie = `${key}=${value}; ${optString}`; 42 | }; 43 | 44 | export const getCookie = (key) => (key = RegExp(`(^| )${key}=([^;]*)(;|$)`).exec(document.cookie)) ? key[2] : null; 45 | 46 | export const delCookie = (key) => { 47 | setCookie(key, '', -1); 48 | }; 49 | -------------------------------------------------------------------------------- /web/src/config/login.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import { store } from '@/config/cache' 3 | import { delCookie, getCookie, setCookie } from '@/config/cookie' 4 | 5 | const USER_INFO = 'user_info'; 6 | const USER_TOKEN = 'token'; 7 | 8 | // 默认两个小时过期,在router/index.js中调用refresh刷新这个过期时间 9 | export const login = (user, time) => { 10 | store.set(USER_INFO, user, time); 11 | setCookie(USER_TOKEN, user.token, time); 12 | }; 13 | 14 | export const refresh = () => { 15 | if (isLogin()) { 16 | const user = store.get(USER_INFO) 17 | login(user) 18 | } 19 | }; 20 | 21 | export const isLogin = () => { 22 | return !!getCookie(USER_TOKEN) && !!store.get(USER_INFO) 23 | }; 24 | 25 | export const logout = () => { 26 | store.clear(USER_INFO); 27 | delCookie(USER_TOKEN); 28 | }; 29 | 30 | export const user = () => { 31 | return (store.get(USER_INFO) || {}).name; 32 | }; 33 | 34 | export const isAdmin = (username) => { 35 | username = username || user() 36 | return username === 'admin' 37 | } 38 | -------------------------------------------------------------------------------- /web/src/config/mapping.js: -------------------------------------------------------------------------------- 1 | 2 | export const ENV_DOMAIN_MAP = { 3 | devDomain: '开发环境', 4 | testDomain: '测试环境', 5 | // test2Domain: '测试环境2', 6 | prevDomain: '预发环境', 7 | onlineDomain: '生产环境' 8 | } 9 | 10 | export const ENV_DOMAIN_LOG_MAP = { 11 | devDomain: 'tgos-dev', 12 | testDomain: 'tgos-test' 13 | // test2Domain: '测试环境2', 14 | // prevDomain: 'tgos-pre', 15 | // onlineDomain: 'tgos-pro' 16 | } 17 | -------------------------------------------------------------------------------- /web/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import 'element-ui/lib/theme-chalk/index.css' 4 | import ElementUI from 'element-ui' 5 | import VueClipboard from 'vue-clipboard2' 6 | 7 | import Vue from 'vue' 8 | import App from './App' 9 | import router from './router' 10 | import { transfer, success } from './config/utils' 11 | import VueQuillEditor from 'vue-quill-editor' 12 | import 'quill/dist/quill.core.css' 13 | import 'quill/dist/quill.snow.css' 14 | import 'quill/dist/quill.bubble.css' 15 | 16 | Vue.config.productionTip = false 17 | Vue.prototype.$transfer = transfer 18 | Vue.prototype.$success = success 19 | 20 | Vue.use(ElementUI) 21 | Vue.use(VueClipboard) 22 | Vue.use(VueQuillEditor) 23 | /* eslint-disable no-new */ 24 | export const that = new Vue({ 25 | el: '#app', 26 | router, 27 | template: '', 28 | components: { App } 29 | }) 30 | -------------------------------------------------------------------------------- /web/src/page/consumer/edit/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .param-value { 4 | width: 450px !important; 5 | } 6 | 7 | .param-key { 8 | width: 230px !important; 9 | } 10 | 11 | .param-label { 12 | width: 50px !important; 13 | } 14 | -------------------------------------------------------------------------------- /web/src/page/consumer/list/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | -------------------------------------------------------------------------------- /web/src/page/flow/function/edit/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .result { 4 | padding: 10px; 5 | border: 1px solid #dcdfe6; 6 | } 7 | 8 | .el-textarea { 9 | width: 700px; 10 | } 11 | -------------------------------------------------------------------------------- /web/src/page/flow/function/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | -------------------------------------------------------------------------------- /web/src/page/flow/testCase/edit/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .preset_params_key { 4 | width: 25%; 5 | } 6 | 7 | .preset_params_value { 8 | width: 35%; 9 | } 10 | 11 | .el-form-item .el-form-item { 12 | margin-bottom: 11px; 13 | } 14 | 15 | .preset_params_value_title { 16 | display: inline-block; 17 | width: 83px; 18 | height: 40px; 19 | position: relative; 20 | top: -1px; 21 | right: -6px; 22 | } 23 | 24 | .testcase_editor_container { 25 | border-radius: 4px; 26 | border: 1px solid #DCDFE6; 27 | } 28 | -------------------------------------------------------------------------------- /web/src/page/flow/testCase/history/detail/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | -------------------------------------------------------------------------------- /web/src/page/flow/testCase/history/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | -------------------------------------------------------------------------------- /web/src/page/flow/testCase/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | -------------------------------------------------------------------------------- /web/src/page/flow/testCase/run/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | -------------------------------------------------------------------------------- /web/src/page/flow/testCase/run/index.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 72 | 73 | 76 | -------------------------------------------------------------------------------- /web/src/page/flow/testapi/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .mark { 4 | color: darkgray; 5 | font-style: italic; 6 | } 7 | 8 | .margin-bottom20 { 9 | margin-bottom: 20px; 10 | } 11 | 12 | .favorite-container { 13 | border: 1px solid #ddd; 14 | margin-right: 1%; 15 | } 16 | 17 | .api-list-item { 18 | width: 20%; 19 | } 20 | -------------------------------------------------------------------------------- /web/src/page/flow/testapi/run/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .half_min_width { 4 | width: 30%; 5 | } 6 | 7 | .half_max_width { 8 | width: 60%; 9 | } 10 | 11 | .left { 12 | width: 46%; 13 | display: inline-block; 14 | vertical-align: top; 15 | padding-right: 1%; 16 | } 17 | 18 | .right { 19 | width: 52%; 20 | display: inline-block; 21 | vertical-align: top; 22 | } 23 | -------------------------------------------------------------------------------- /web/src/page/index/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | .main_left_content_section_tit{ 3 | padding: 15px; 4 | background: #FAFBFF; 5 | margin-top: 20px; 6 | line-height: 35px; 7 | border-radius: 4px 4px 0 0; 8 | border-bottom: 1px solid #ddd; 9 | p{ 10 | font-size: 16px; 11 | color: #7F7F7F; 12 | } 13 | } 14 | .index-con{ 15 | background: #fff; 16 | padding: 40px 50px; 17 | border-radius: 0 0 4px 4px; 18 | margin-bottom: 40px; 19 | .index-fans__1,.index-fans__2,.index-fans__3,.index-fans__4{ 20 | >div{ 21 | padding: 35px 0; 22 | color: #ffffff; 23 | border-radius: 5px; 24 | text-align: center; 25 | } 26 | p{ 27 | padding-bottom: 20px; 28 | font-size: 18px; 29 | font-weight: 600; 30 | } 31 | h3{ 32 | font-size: 24px; 33 | } 34 | } 35 | .index-fans__1>div{ 36 | background: #68ddd5; 37 | } 38 | .index-fans__2>div{ 39 | background: #F36175; 40 | } 41 | .index-fans__3>div{ 42 | background: #F4C85B; 43 | } 44 | .index-fans__4>div{ 45 | background: #81A2FF; 46 | } 47 | } 48 | .select-from{ 49 | position: absolute; 50 | right: 0; 51 | width: 200px; 52 | top: -9px; 53 | text-indent: 0; 54 | } 55 | 56 | -------------------------------------------------------------------------------- /web/src/page/index/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 24 | 25 | 26 | 29 | -------------------------------------------------------------------------------- /web/src/page/interfaces/customer/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .customer .logs { 4 | span { 5 | color: #e76262; 6 | } 7 | } 8 | 9 | .customer .json { 10 | height: 475px; 11 | overflow: auto; 12 | padding: 20px; 13 | border: 4px solid #ddd; 14 | border-radius: 4px; 15 | line-height: 1.4; 16 | } 17 | 18 | .customer .header { 19 | position: fixed; 20 | z-index: 100; 21 | background: #4063ff; 22 | background-size: 100% 100%; 23 | width: 100%; 24 | height: 60px; 25 | 26 | & h3 { 27 | display: inline-block; 28 | margin: 0; 29 | top: -20px; 30 | position: relative; 31 | color: white; 32 | } 33 | } 34 | 35 | .customer .logo { 36 | height: 100%; 37 | padding: 12px; 38 | } 39 | 40 | .customer .menu { 41 | display: inline-block; 42 | } 43 | 44 | .customer .mark { 45 | white-space: pre; 46 | } 47 | 48 | .customer_container { 49 | width: 100%; 50 | text-align: center; 51 | padding: 50% 0; 52 | } 53 | 54 | .result-container { 55 | display: inline-block; 56 | .success { 57 | line-height: 30px; 58 | font-size: 50px; 59 | } 60 | .failed { 61 | line-height: 30px; 62 | font-size: 50px; 63 | color: red; 64 | } 65 | } 66 | 67 | .center { 68 | text-align: center; 69 | } 70 | 71 | .title { 72 | font-size: 20px; 73 | font-family: "黑体", serif; 74 | } 75 | 76 | .subtitle { 77 | font-size: 16px; 78 | margin: 25px 0 50px 0; 79 | } 80 | 81 | @media only screen and (max-width: 640px) { 82 | #app { 83 | background: #fff; 84 | min-width: inherit !important; 85 | } 86 | 87 | .customer .header { 88 | height: 50px; 89 | 90 | & h3 { 91 | font-size: 20px; 92 | top: -18px; 93 | } 94 | } 95 | 96 | .customer .index_more { 97 | background: #fff; 98 | } 99 | 100 | .customer .index_more .index_chunk { 101 | margin: 50px 0 0 0; 102 | padding: 10px 10px 10px !important; 103 | } 104 | 105 | .customer .el-form-item__label { 106 | font-size: 17px; 107 | margin-left: 1em; 108 | float: none; 109 | } 110 | .customer .el-form-item__content { 111 | margin-left: 1em !important; 112 | margin-right: 1em !important; 113 | word-break: break-all; 114 | } 115 | 116 | .json-container { 117 | padding: 0 20px !important; 118 | } 119 | } 120 | 121 | -------------------------------------------------------------------------------- /web/src/page/interfaces/edit/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .el-input, .el-select { 4 | width: 400px; 5 | } 6 | -------------------------------------------------------------------------------- /web/src/page/interfaces/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .mark { 4 | color: darkgray; 5 | font-style: italic; 6 | } 7 | 8 | .margin-bottom20 { 9 | margin-bottom: 20px; 10 | } 11 | -------------------------------------------------------------------------------- /web/src/page/interfaces/view/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | .logs { 3 | span { 4 | color: #e76262; 5 | } 6 | } 7 | 8 | .json { 9 | height: 475px; 10 | overflow: auto; 11 | padding: 20px; 12 | border: 4px solid #ddd; 13 | border-radius: 4px; 14 | line-height: 1.4; 15 | } 16 | 17 | .history { 18 | color: #888d; 19 | font-style: italic; 20 | & a { 21 | color: inherit; 22 | } 23 | } 24 | 25 | .user, .pre, .date { 26 | display: inline-block; 27 | vertical-align: top; 28 | } 29 | -------------------------------------------------------------------------------- /web/src/page/login/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | .login { 3 | @include bis('../../assets/img/bg.png'); 4 | @include wh(100%, 100%); 5 | position: relative; 6 | min-height: 650px; 7 | .login-box { 8 | @include wh(520px, 610px); 9 | @include allcover; 10 | margin: auto; 11 | text-align: center; 12 | animation: bounceIn 600ms linear; 13 | min-height: 650px; 14 | .logo { 15 | width: 140px; 16 | height: auto; 17 | } 18 | .form { 19 | background: #fff; 20 | border-radius: 10px; 21 | padding: 70px 50px 40px 50px; 22 | width: 85%; 23 | margin: 20px auto 0; 24 | .el-form-item:last-child { 25 | margin: 0; 26 | .validate { 27 | height: 40px; 28 | text-align: right; 29 | .code-pic { 30 | cursor: pointer; 31 | } 32 | } 33 | } 34 | } 35 | .el-row { 36 | margin: 0; 37 | a { 38 | color: #409EFF; 39 | } 40 | } 41 | .el-button { 42 | width: 100%; 43 | } 44 | } 45 | } 46 | 47 | .logo_title { 48 | font-size: 28px; 49 | color: #fff; 50 | font-weight: 600; 51 | letter-spacing: 2px; 52 | } 53 | 54 | @keyframes bounceIn { 55 | 0% { 56 | opacity: 0; 57 | transform: scale(.3); 58 | } 59 | 50% { 60 | opacity: 1; 61 | transform: scale(1.05); 62 | } 63 | 70% { 64 | transform: scale(.9); 65 | } 66 | 100% { 67 | transform: scale(1); 68 | } 69 | } 70 | 71 | .mask { 72 | height: 100%; 73 | width: 100%; 74 | left: 0; 75 | top: 0; 76 | position: absolute; 77 | background: #000000aa; 78 | .mask-text { 79 | color: white; 80 | padding: 30% 10%; 81 | line-height: 3em; 82 | } 83 | } 84 | 85 | .qrcode-login-container { 86 | height: 220px; 87 | width: 220px; 88 | position: relative; 89 | margin: auto; 90 | } 91 | -------------------------------------------------------------------------------- /web/src/page/package/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .mark { 4 | color: darkgray; 5 | font-style: italic; 6 | } 7 | 8 | .margin-bottom20 { 9 | margin-bottom: 20px; 10 | } 11 | -------------------------------------------------------------------------------- /web/src/page/package/view/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .mark { 4 | white-space: pre; 5 | } 6 | -------------------------------------------------------------------------------- /web/src/page/provider/edit/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .param-value { 4 | width: 450px !important; 5 | } 6 | 7 | .param-key { 8 | width: 230px !important; 9 | } 10 | -------------------------------------------------------------------------------- /web/src/page/provider/list/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | -------------------------------------------------------------------------------- /web/src/page/sample/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | -------------------------------------------------------------------------------- /web/src/page/sample/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 46 | 47 | 48 | 51 | -------------------------------------------------------------------------------- /web/src/page/system/user/edit/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .el-input { 4 | width: 440px; 5 | } 6 | -------------------------------------------------------------------------------- /web/src/page/system/user/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .filters .el-input { 4 | width: 220px; 5 | } 6 | -------------------------------------------------------------------------------- /web/src/page/test/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | .half_min_width { 3 | width: 30%; 4 | } 5 | 6 | .half_max_width { 7 | width: 60%; 8 | } 9 | 10 | .left { 11 | width: 46%; 12 | display: inline-block; 13 | vertical-align: top; 14 | padding-right: 1%; 15 | } 16 | 17 | .right { 18 | width: 52%; 19 | display: inline-block; 20 | vertical-align: top; 21 | } 22 | -------------------------------------------------------------------------------- /web/src/page/transfer/index.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .transfer_container { 4 | width: 100%; 5 | text-align: center; 6 | padding: 14% 0; 7 | } 8 | 9 | .result-container { 10 | display: inline-block; 11 | .success { 12 | line-height: 45px; 13 | font-size: 80px; 14 | color: #01c853; 15 | } 16 | .failed { 17 | line-height: 45px; 18 | font-size: 80px; 19 | color: red; 20 | } 21 | } 22 | 23 | .center { 24 | text-align: center; 25 | } 26 | 27 | .title { 28 | font-size: 20px; 29 | font-family: "黑体", serif; 30 | } 31 | 32 | .subtitle { 33 | font-size: 16px; 34 | margin: 25px 0 50px 0; 35 | } 36 | -------------------------------------------------------------------------------- /web/src/page/transfer/index.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | /** 25 | * 26 | * 调用方式: 27 | * 28 | * this.$transfer({ 29 | * result: true/false; 如果为true显示成功样式,false显示失败样式 默认为true 30 | * back: '返回', // 如果不需要这个按钮,传false来, 默认为返回上一级 31 | * title: '操作成功!', // 默认显示 操作成功! 32 | * subtitle: 'xxxx', // 默认不显示 33 | * buttons: [{ 34 | * text: '去列表', 35 | * link: '/system/role', 36 | * }, {}], 37 | * }); 38 | * 39 | */ 40 | 77 | 78 | 81 | -------------------------------------------------------------------------------- /web/src/store/store.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 示例: 3 | get: this.$store.state.xxx 4 | set: this.$store.commit('xxx',xxx); 5 | */ 6 | import Vuex from 'vuex' 7 | import Vue from 'vue' 8 | 9 | Vue.use(Vuex) 10 | export default new Vuex.Store({ 11 | state: { 12 | // isValidator: true, 13 | toLink: '' 14 | }, 15 | mutations: { 16 | // setValidator: (state, bool) => { 17 | // state.isValidator = bool; 18 | // }, 19 | } 20 | }) 21 | -------------------------------------------------------------------------------- /web/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/static/.gitkeep --------------------------------------------------------------------------------