├── .classpath ├── .factorypath ├── .gitignore ├── .project ├── .settings ├── org.eclipse.core.resources.prefs ├── org.eclipse.jdt.apt.core.prefs ├── org.eclipse.jdt.core.prefs └── org.eclipse.m2e.core.prefs ├── LICENSE ├── README.md ├── keystore.p12 ├── logs ├── case-server-error.log └── case-server-info.log ├── pom.xml ├── sql └── case-server.sql ├── src ├── main │ ├── java │ │ └── com │ │ │ └── xiaoju │ │ │ └── framework │ │ │ ├── CaseServerApplication.java │ │ │ ├── config │ │ │ └── ApplicationConfig.java │ │ │ ├── constants │ │ │ ├── BizConstant.java │ │ │ ├── SystemConstant.java │ │ │ ├── XmindConstant.java │ │ │ └── enums │ │ │ │ ├── EnvEnum.java │ │ │ │ ├── PriorityEnum.java │ │ │ │ ├── ProgressEnum.java │ │ │ │ └── StatusCode.java │ │ │ ├── controller │ │ │ ├── BackupController.java │ │ │ ├── CaseController.java │ │ │ ├── DirController.java │ │ │ ├── RecordController.java │ │ │ ├── UploadController.java │ │ │ ├── UserController.java │ │ │ └── WebController.java │ │ │ ├── entity │ │ │ ├── dto │ │ │ │ ├── Authority.java │ │ │ │ ├── DirNodeDto.java │ │ │ │ ├── MergeCaseDto.java │ │ │ │ ├── PickCaseDto.java │ │ │ │ ├── RecordNumDto.java │ │ │ │ ├── RecordWsDto.java │ │ │ │ └── User.java │ │ │ ├── exception │ │ │ │ ├── CaseServerException.java │ │ │ │ └── ExpHandler.java │ │ │ ├── persistent │ │ │ │ ├── Biz.java │ │ │ │ ├── CaseBackup.java │ │ │ │ ├── ExecRecord.java │ │ │ │ └── TestCase.java │ │ │ ├── request │ │ │ │ ├── ParamValidate.java │ │ │ │ ├── auth │ │ │ │ │ ├── UserLoginReq.java │ │ │ │ │ └── UserRegisterReq.java │ │ │ │ ├── cases │ │ │ │ │ ├── CaseConditionReq.java │ │ │ │ │ ├── CaseCreateReq.java │ │ │ │ │ ├── CaseDeleteReq.java │ │ │ │ │ ├── CaseEditReq.java │ │ │ │ │ ├── CaseQueryReq.java │ │ │ │ │ └── FileImportReq.java │ │ │ │ ├── dir │ │ │ │ │ ├── DirCreateReq.java │ │ │ │ │ ├── DirDeleteReq.java │ │ │ │ │ └── DirRenameReq.java │ │ │ │ ├── record │ │ │ │ │ ├── RecordAddReq.java │ │ │ │ │ ├── RecordDeleteReq.java │ │ │ │ │ ├── RecordQueryReq.java │ │ │ │ │ └── RecordUpdateReq.java │ │ │ │ └── ws │ │ │ │ │ ├── RecordWsClearReq.java │ │ │ │ │ └── WsSaveReq.java │ │ │ ├── response │ │ │ │ ├── PersonResp.java │ │ │ │ ├── cases │ │ │ │ │ ├── CaseConditionResp.java │ │ │ │ │ ├── CaseDetailResp.java │ │ │ │ │ ├── CaseGeneralInfoResp.java │ │ │ │ │ ├── CaseListResp.java │ │ │ │ │ └── ExportXmindResp.java │ │ │ │ ├── controller │ │ │ │ │ ├── PageModule.java │ │ │ │ │ ├── Response.java │ │ │ │ │ └── Status.java │ │ │ │ ├── dir │ │ │ │ │ ├── BizListResp.java │ │ │ │ │ ├── BizNodeResp.java │ │ │ │ │ └── DirTreeResp.java │ │ │ │ └── records │ │ │ │ │ ├── RecordGeneralInfoResp.java │ │ │ │ │ └── RecordListResp.java │ │ │ └── xmind │ │ │ │ ├── CaseContent.java │ │ │ │ ├── CaseCount.java │ │ │ │ ├── DataObj.java │ │ │ │ ├── IntCount.java │ │ │ │ └── RootData.java │ │ │ ├── filter │ │ │ └── WebSocketFilter.java │ │ │ ├── handler │ │ │ ├── CaseMessageType.java │ │ │ ├── CaseRoom.java │ │ │ ├── CaseWsMessages.java │ │ │ ├── Client.java │ │ │ ├── RecordRoom.java │ │ │ ├── Room.java │ │ │ └── WebSocket.java │ │ │ ├── listener │ │ │ └── IocCloseListener.java │ │ │ ├── mapper │ │ │ ├── AuthorityMapper.java │ │ │ ├── BizMapper.java │ │ │ ├── CaseBackupMapper.java │ │ │ ├── ExecRecordMapper.java │ │ │ ├── TestCaseMapper.java │ │ │ └── UserMapper.java │ │ │ ├── service │ │ │ ├── CaseBackupService.java │ │ │ ├── CaseService.java │ │ │ ├── DirService.java │ │ │ ├── FileService.java │ │ │ ├── RecordService.java │ │ │ ├── UserService.java │ │ │ └── impl │ │ │ │ ├── CaseBackupServiceImpl.java │ │ │ │ ├── CaseServiceImpl.java │ │ │ │ ├── DirServiceImpl.java │ │ │ │ ├── FileServiceImpl.java │ │ │ │ ├── RecordServiceImpl.java │ │ │ │ └── UserServiceImpl.java │ │ │ └── util │ │ │ ├── BitBaseUtil.java │ │ │ ├── CodecUtils.java │ │ │ ├── CookieUtils.java │ │ │ ├── FileUtil.java │ │ │ ├── SpringUtils.java │ │ │ ├── StringUtil.java │ │ │ ├── TimeUtil.java │ │ │ └── TreeUtil.java │ ├── resources │ │ ├── application-dev.properties │ │ ├── application.properties │ │ ├── com │ │ │ └── xiaoju │ │ │ │ └── framework │ │ │ │ └── mapper │ │ │ │ ├── AuthorityMapper.xml │ │ │ │ ├── BizMapper.xml │ │ │ │ ├── CaseBackupMapper.xml │ │ │ │ ├── ExecRecordMapper.xml │ │ │ │ ├── TestCaseMapper.xml │ │ │ │ └── UserMapper.xml │ │ ├── generatorConfig.xml │ │ ├── log4j2.xml │ │ └── web │ │ │ ├── .editorconfig │ │ │ ├── .eslintignore │ │ │ ├── .eslintrc │ │ │ ├── .gitignore │ │ │ ├── .prettierignore │ │ │ ├── .prettierrc │ │ │ ├── .umirc copy.js │ │ │ ├── .umirc.js │ │ │ ├── .umirc.pro.js │ │ │ ├── .umirc.sit.js │ │ │ ├── README.md │ │ │ ├── config │ │ │ ├── config.dev.js │ │ │ ├── config.pro.js │ │ │ └── config.sit.js │ │ │ ├── dist │ │ │ ├── antd.4a91bc25.chunk.css │ │ │ ├── antd.d95b3bef.async.js │ │ │ ├── img │ │ │ │ ├── 2.ico │ │ │ │ ├── 2.png │ │ │ │ ├── 3.ico │ │ │ │ ├── 3.png │ │ │ │ ├── favico.ico │ │ │ │ └── favico.png │ │ │ ├── index.html │ │ │ ├── layouts__index.28b9f196.async.js │ │ │ ├── layouts__index.903d1124.chunk.css │ │ │ ├── p__casepage__index.664ed881.async.js │ │ │ ├── p__casepage__index.82014df8.chunk.css │ │ │ ├── p__contrast__index.207ff033.chunk.css │ │ │ ├── p__contrast__index.775553d1.async.js │ │ │ ├── p__contrast__seeResult.7fa89a79.async.js │ │ │ ├── p__contrast__seeResult.b6dbebf8.chunk.css │ │ │ ├── p__landing__index.652605c2.async.js │ │ │ ├── p__landing__index.af489b2c.chunk.css │ │ │ ├── p__landing__login.aef4033c.chunk.css │ │ │ ├── p__landing__login.d71e657a.async.js │ │ │ ├── p__testTask__index.6b035042.chunk.css │ │ │ ├── p__testTask__index.b4ad6649.async.js │ │ │ ├── rc-select.5ed1c300.async.js │ │ │ ├── rccalendar.bd93d07c.async.js │ │ │ ├── rcdrawer.68e97adb.async.js │ │ │ ├── rctimepicker.8aaf7bc3.async.js │ │ │ ├── static │ │ │ │ ├── atclogo4.ac91848f.png │ │ │ │ └── login.032e8b38.png │ │ │ ├── umi.d9c301fa.js │ │ │ ├── vendors.18d4e45b.async.js │ │ │ └── vendors.2684c14a.chunk.css │ │ │ ├── mock │ │ │ ├── .gitkeep │ │ │ └── index.js │ │ │ ├── package.json │ │ │ ├── public │ │ │ └── img │ │ │ │ ├── 2.ico │ │ │ │ ├── 2.png │ │ │ │ ├── 3.ico │ │ │ │ ├── 3.png │ │ │ │ ├── favico.ico │ │ │ │ └── favico.png │ │ │ ├── src │ │ │ ├── app.js │ │ │ ├── components │ │ │ │ └── case │ │ │ │ │ ├── caselist │ │ │ │ │ ├── caseModal.js │ │ │ │ │ ├── filter.js │ │ │ │ │ ├── img │ │ │ │ │ │ └── swap.png │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.scss │ │ │ │ │ ├── list.js │ │ │ │ │ ├── oefilter.js │ │ │ │ │ ├── taskModal.js │ │ │ │ │ └── tree.js │ │ │ │ │ └── casemgt │ │ │ │ │ ├── index.js │ │ │ │ │ └── index.scss │ │ │ ├── layouts │ │ │ │ ├── headers.js │ │ │ │ ├── index.js │ │ │ │ └── index.scss │ │ │ ├── models │ │ │ │ ├── .gitkeep │ │ │ │ └── global.js │ │ │ ├── pages │ │ │ │ ├── 404.js │ │ │ │ ├── casepage │ │ │ │ │ └── index.js │ │ │ │ ├── contrast │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.scss │ │ │ │ │ └── seeResult.js │ │ │ │ ├── document.ejs │ │ │ │ ├── landing │ │ │ │ │ ├── Banner3.jsx │ │ │ │ │ ├── Footer0.jsx │ │ │ │ │ ├── data.source.js │ │ │ │ │ ├── documentation.md │ │ │ │ │ ├── img │ │ │ │ │ │ ├── atclogo4.png │ │ │ │ │ │ └── login.png │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── less │ │ │ │ │ │ ├── antMotionStyle.less │ │ │ │ │ │ ├── banner3.less │ │ │ │ │ │ ├── common.less │ │ │ │ │ │ ├── content.less │ │ │ │ │ │ ├── custom.less │ │ │ │ │ │ ├── edit.less │ │ │ │ │ │ ├── footer0.less │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── login.less │ │ │ │ │ ├── login.jsx │ │ │ │ │ └── utils.js │ │ │ │ └── testTask │ │ │ │ │ └── index.js │ │ │ ├── services │ │ │ │ └── global.js │ │ │ └── utils │ │ │ │ ├── axios.js │ │ │ │ ├── getCookies.js │ │ │ │ ├── index.js │ │ │ │ ├── link.js │ │ │ │ └── requirementUtils.js │ │ │ └── webpack.config.js │ └── 逻辑.png └── test │ └── java │ └── com │ └── xiaoju │ └── framework │ └── CaseServerApplicationTests.java └── target ├── classes ├── application-dev.properties ├── application.properties ├── com │ └── xiaoju │ │ └── framework │ │ ├── CaseServerApplication.class │ │ ├── config │ │ ├── ApplicationConfig$1.class │ │ └── ApplicationConfig.class │ │ ├── constants │ │ ├── BizConstant.class │ │ ├── SystemConstant.class │ │ ├── XmindConstant.class │ │ └── enums │ │ │ ├── EnvEnum.class │ │ │ ├── PriorityEnum.class │ │ │ ├── ProgressEnum.class │ │ │ └── StatusCode.class │ │ ├── controller │ │ ├── BackupController.class │ │ ├── CaseController.class │ │ ├── DirController.class │ │ ├── RecordController.class │ │ ├── UploadController.class │ │ ├── UserController.class │ │ └── WebController.class │ │ ├── entity │ │ ├── dto │ │ │ ├── Authority.class │ │ │ ├── DirNodeDto.class │ │ │ ├── MergeCaseDto.class │ │ │ ├── PickCaseDto.class │ │ │ ├── RecordNumDto.class │ │ │ ├── RecordWsDto.class │ │ │ └── User.class │ │ ├── exception │ │ │ ├── CaseServerException.class │ │ │ └── ExpHandler.class │ │ ├── persistent │ │ │ ├── Biz.class │ │ │ ├── CaseBackup.class │ │ │ ├── ExecRecord.class │ │ │ └── TestCase.class │ │ ├── request │ │ │ ├── ParamValidate.class │ │ │ ├── auth │ │ │ │ ├── UserLoginReq.class │ │ │ │ └── UserRegisterReq.class │ │ │ ├── cases │ │ │ │ ├── CaseConditionReq.class │ │ │ │ ├── CaseCreateReq.class │ │ │ │ ├── CaseDeleteReq.class │ │ │ │ ├── CaseEditReq.class │ │ │ │ ├── CaseQueryReq.class │ │ │ │ └── FileImportReq.class │ │ │ ├── dir │ │ │ │ ├── DirCreateReq.class │ │ │ │ ├── DirDeleteReq.class │ │ │ │ └── DirRenameReq.class │ │ │ ├── record │ │ │ │ ├── RecordAddReq.class │ │ │ │ ├── RecordDeleteReq.class │ │ │ │ ├── RecordQueryReq.class │ │ │ │ └── RecordUpdateReq.class │ │ │ └── ws │ │ │ │ ├── RecordWsClearReq.class │ │ │ │ └── WsSaveReq.class │ │ ├── response │ │ │ ├── PersonResp.class │ │ │ ├── cases │ │ │ │ ├── CaseConditionResp.class │ │ │ │ ├── CaseDetailResp.class │ │ │ │ ├── CaseGeneralInfoResp.class │ │ │ │ ├── CaseListResp.class │ │ │ │ └── ExportXmindResp.class │ │ │ ├── controller │ │ │ │ ├── PageModule.class │ │ │ │ ├── Response.class │ │ │ │ └── Status.class │ │ │ ├── dir │ │ │ │ ├── BizListResp.class │ │ │ │ ├── BizNodeResp.class │ │ │ │ └── DirTreeResp.class │ │ │ └── records │ │ │ │ ├── RecordGeneralInfoResp.class │ │ │ │ └── RecordListResp.class │ │ └── xmind │ │ │ ├── CaseContent.class │ │ │ ├── CaseCount.class │ │ │ ├── DataObj.class │ │ │ ├── IntCount.class │ │ │ └── RootData.class │ │ ├── filter │ │ ├── WebSocketFilter$WsAuthFilter.class │ │ └── WebSocketFilter.class │ │ ├── handler │ │ ├── CaseMessageType.class │ │ ├── CaseRoom.class │ │ ├── CaseWsMessages.class │ │ ├── Client$1.class │ │ ├── Client.class │ │ ├── RecordRoom.class │ │ ├── Room$1$1.class │ │ ├── Room$1.class │ │ ├── Room$Player.class │ │ ├── Room.class │ │ ├── WebSocket$1.class │ │ ├── WebSocket$2.class │ │ ├── WebSocket$3.class │ │ └── WebSocket.class │ │ ├── listener │ │ └── IocCloseListener.class │ │ ├── mapper │ │ ├── AuthorityMapper.class │ │ ├── AuthorityMapper.xml │ │ ├── BizMapper.class │ │ ├── BizMapper.xml │ │ ├── CaseBackupMapper.class │ │ ├── CaseBackupMapper.xml │ │ ├── ExecRecordMapper.class │ │ ├── ExecRecordMapper.xml │ │ ├── TestCaseMapper.class │ │ ├── TestCaseMapper.xml │ │ ├── UserMapper.class │ │ └── UserMapper.xml │ │ ├── service │ │ ├── CaseBackupService.class │ │ ├── CaseService.class │ │ ├── DirService.class │ │ ├── FileService.class │ │ ├── RecordService.class │ │ ├── UserService.class │ │ └── impl │ │ │ ├── CaseBackupServiceImpl.class │ │ │ ├── CaseServiceImpl.class │ │ │ ├── DirServiceImpl.class │ │ │ ├── FileServiceImpl.class │ │ │ ├── RecordServiceImpl.class │ │ │ └── UserServiceImpl.class │ │ └── util │ │ ├── BitBaseUtil.class │ │ ├── CodecUtils.class │ │ ├── CookieUtils.class │ │ ├── FileUtil.class │ │ ├── SpringUtils.class │ │ ├── StringUtil.class │ │ ├── TimeUtil.class │ │ ├── TreeUtil$1.class │ │ └── TreeUtil.class ├── generatorConfig.xml ├── log4j2.xml └── web │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc │ ├── .prettierignore │ ├── .prettierrc │ ├── .umirc copy.js │ ├── .umirc.js │ ├── .umirc.pro.js │ ├── .umirc.sit.js │ ├── README.md │ ├── config │ ├── config.dev.js │ ├── config.pro.js │ └── config.sit.js │ ├── dist │ ├── antd.4a91bc25.chunk.css │ ├── antd.d95b3bef.async.js │ ├── img │ │ ├── 2.ico │ │ ├── 2.png │ │ ├── 3.ico │ │ ├── 3.png │ │ ├── favico.ico │ │ └── favico.png │ ├── index.html │ ├── layouts__index.28b9f196.async.js │ ├── layouts__index.903d1124.chunk.css │ ├── p__casepage__index.664ed881.async.js │ ├── p__casepage__index.82014df8.chunk.css │ ├── p__contrast__index.207ff033.chunk.css │ ├── p__contrast__index.775553d1.async.js │ ├── p__contrast__seeResult.7fa89a79.async.js │ ├── p__contrast__seeResult.b6dbebf8.chunk.css │ ├── p__landing__index.652605c2.async.js │ ├── p__landing__index.af489b2c.chunk.css │ ├── p__landing__login.aef4033c.chunk.css │ ├── p__landing__login.d71e657a.async.js │ ├── p__testTask__index.6b035042.chunk.css │ ├── p__testTask__index.b4ad6649.async.js │ ├── rc-select.5ed1c300.async.js │ ├── rccalendar.bd93d07c.async.js │ ├── rcdrawer.68e97adb.async.js │ ├── rctimepicker.8aaf7bc3.async.js │ ├── static │ │ ├── atclogo4.ac91848f.png │ │ └── login.032e8b38.png │ ├── umi.d9c301fa.js │ ├── vendors.18d4e45b.async.js │ └── vendors.2684c14a.chunk.css │ ├── mock │ ├── .gitkeep │ └── index.js │ ├── package-lock.json │ ├── package.json │ ├── public │ └── img │ │ ├── 2.ico │ │ ├── 2.png │ │ ├── 3.ico │ │ ├── 3.png │ │ ├── favico.ico │ │ └── favico.png │ ├── src │ ├── app.js │ ├── components │ │ └── case │ │ │ ├── caselist │ │ │ ├── caseModal.js │ │ │ ├── filter.js │ │ │ ├── img │ │ │ │ └── swap.png │ │ │ ├── index.js │ │ │ ├── index.scss │ │ │ ├── list.js │ │ │ ├── oefilter.js │ │ │ ├── taskModal.js │ │ │ └── tree.js │ │ │ └── casemgt │ │ │ ├── index.js │ │ │ └── index.scss │ ├── layouts │ │ ├── headers.js │ │ ├── index.js │ │ └── index.scss │ ├── models │ │ ├── .gitkeep │ │ └── global.js │ ├── pages │ │ ├── .umi │ │ │ ├── TitleWrapper.jsx │ │ │ ├── dva.js │ │ │ ├── history.js │ │ │ ├── polyfills.js │ │ │ ├── router.js │ │ │ ├── umi.js │ │ │ └── umiExports.ts │ │ ├── 404.js │ │ ├── casepage │ │ │ └── index.js │ │ ├── contrast │ │ │ ├── index.jsx │ │ │ ├── index.scss │ │ │ └── seeResult.js │ │ ├── document.ejs │ │ ├── landing │ │ │ ├── Banner3.jsx │ │ │ ├── Footer0.jsx │ │ │ ├── data.source.js │ │ │ ├── documentation.md │ │ │ ├── img │ │ │ │ ├── atclogo4.png │ │ │ │ └── login.png │ │ │ ├── index.jsx │ │ │ ├── less │ │ │ │ ├── antMotionStyle.less │ │ │ │ ├── banner3.less │ │ │ │ ├── common.less │ │ │ │ ├── content.less │ │ │ │ ├── custom.less │ │ │ │ ├── edit.less │ │ │ │ ├── footer0.less │ │ │ │ ├── index.less │ │ │ │ └── login.less │ │ │ ├── login.jsx │ │ │ └── utils.js │ │ └── testTask │ │ │ └── index.js │ ├── services │ │ └── global.js │ └── utils │ │ ├── axios.js │ │ ├── getCookies.js │ │ ├── index.js │ │ ├── link.js │ │ └── requirementUtils.js │ └── webpack.config.js ├── maven-status └── maven-compiler-plugin │ ├── compile │ └── default-compile │ │ ├── createdFiles.lst │ │ └── inputFiles.lst │ └── testCompile │ └── default-testCompile │ ├── createdFiles.lst │ └── inputFiles.lst └── test-classes └── com └── xiaoju └── framework └── CaseServerApplicationTests.class /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target //忽略这个target目录 2 | angular.json //忽略这个angular.json文件 3 | log/* //忽略log下的所有文件 4 | css/*.css //忽略css目录下的.css文件 -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | case-server 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//src/main/java=UTF-8 3 | encoding//src/main/resources=UTF-8 4 | encoding//src/test/java=UTF-8 5 | encoding/=UTF-8 6 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.apt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.apt.aptEnabled=true 3 | org.eclipse.jdt.apt.genSrcDir=target\\generated-sources\\annotations 4 | org.eclipse.jdt.apt.genTestSrcDir=target\\generated-test-sources\\test-annotations 5 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.methodParameters=generate 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.compliance=1.8 5 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled 6 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 7 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore 8 | org.eclipse.jdt.core.compiler.processAnnotations=enabled 9 | org.eclipse.jdt.core.compiler.release=disabled 10 | org.eclipse.jdt.core.compiler.source=1.8 11 | -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /keystore.p12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/keystore.p12 -------------------------------------------------------------------------------- /logs/case-server-error.log: -------------------------------------------------------------------------------- 1 | 2021-07-20 11:25:31.314 [Thread-5][ERROR][com.xiaoju.framework.handler.Room$Player.sendRoomMessageSync(Room.java:490)]:服务端ping客户端3次失败,当前用户连接有问题:刘智 2 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/CaseServerApplication.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * 启动类 8 | * 9 | * @author 刘智 10 | * @date 2020/11/26 11 | */ 12 | @SpringBootApplication 13 | public class CaseServerApplication { 14 | public static void main(String[] args) { 15 | SpringApplication.run(CaseServerApplication.class, args); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/constants/BizConstant.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.constants; 2 | 3 | /** 4 | * 文件夹相关的常量 5 | * 6 | * @author 刘智 7 | * @date 2020/9/8 8 | */ 9 | public class BizConstant { 10 | 11 | /** 12 | * 未分类的文件夹id,这是一个虚拟的id 由前端传入 13 | */ 14 | public static final String UNSORTED_BIZ_ID = "-1"; 15 | 16 | /** 17 | * 根节点 18 | */ 19 | public static final String ROOT_BIZ_ID = "root"; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/constants/SystemConstant.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.constants; 2 | 3 | /** 4 | * 系统常量 5 | * 6 | * @author 刘智 7 | * @date 2020/8/12 8 | */ 9 | public class SystemConstant { 10 | 11 | public final static String EMPTY_STR = ""; 12 | 13 | public final static String COMMA = ","; 14 | 15 | public final static Integer IS_DELETE = 1; 16 | public final static Integer NOT_DELETE = 0; 17 | 18 | public static final String POINT = "."; 19 | 20 | public static final String HTTP_USER_AGENT = "User-Agent"; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/constants/XmindConstant.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.constants; 2 | 3 | /** 4 | * Xmind相关的常量 5 | * 6 | * @author 刘智 7 | * @date 2020/8/13 8 | */ 9 | public class XmindConstant { 10 | 11 | public static final String UNDEFINED = "undefined"; 12 | 13 | public static final String DATA = "data"; 14 | 15 | public static final String ROOT = "root"; 16 | 17 | public static final String TEMPLATE = "template"; 18 | 19 | public static final String THEME = "theme"; 20 | 21 | public static final String VERSION = "version"; 22 | 23 | public static final String BASE = "base"; 24 | 25 | public static final String TEMPLATE_RIGHT = "right"; 26 | 27 | public static final String TEMPLATE_DEFAULT = "default"; 28 | 29 | public static final String THEME_DEFAULT = "fresh-blue"; 30 | 31 | public static final String VERSION_DEFAULT = "1.4.43"; 32 | 33 | public static final String BASE_DEFAULT = "16"; 34 | 35 | public static final String XMIND_SUFFIX = "xmind"; 36 | 37 | public static final String ZIP_SUFFIX = "zip"; 38 | 39 | public static final String TEMP_FOLDER = "/temp/"; 40 | 41 | public static final String TEMP_FOLDER_EXPORT = "/temp/export/"; 42 | 43 | public static final String CONTENT_JSON = "content.json"; 44 | 45 | /** 46 | * xmind - zen 版本的xmind节点版本号 47 | */ 48 | public static final String ZEN_ROOT_VERSION = "53ptgae5ptd1886rc7i8k40boa"; 49 | 50 | /** 51 | * 导出时需要写入的xmind主题类型 52 | */ 53 | public static final String XMIND_THEME_VERSION = "7473aupb6bv1i2bstr1sgj7bo9"; 54 | 55 | public static final String XMIND_CREATED_VERSION = "1611739849951"; 56 | 57 | public static final String XMIND_MODIFIED_VERSION = "v.1.0.0"; 58 | 59 | public static final String XMIND_MAINFEST_XMLNS = "urn:xmind:xmap:xmlns:manifest:1.0"; 60 | 61 | public static final String XMIND_META_XMLNS = "urn:xmind:xmap:xmlns:meta:2.0"; 62 | 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/constants/enums/EnvEnum.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.constants.enums; 2 | 3 | /** 4 | * 执行任务环境枚举 5 | * 6 | * @author 刘智 7 | * @date 2020/9/24 8 | */ 9 | public enum EnvEnum { 10 | // 枚举 11 | TestEnv(0, "测试环境"), PreEnv(1, "预发环境"), OnlineEnv(2, "线上环境"), TestQaEnv(3, "冒烟qa"), TestRdEnv(4, "冒烟rd"); 12 | 13 | private Integer value; 14 | private String name; 15 | 16 | EnvEnum(Integer value, String name) { 17 | this.value = value; 18 | this.name = name; 19 | } 20 | 21 | public Integer getValue() { 22 | return value; 23 | } 24 | 25 | public String getName() { 26 | return name; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/constants/enums/PriorityEnum.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.constants.enums; 2 | 3 | /** 4 | * 圈选用例枚举 5 | * 6 | * @author 刘智 7 | * @date 2020/3/19 8 | */ 9 | public enum PriorityEnum { 10 | // 枚举 11 | Priority0(1, "P0用例"), Priority1(2, "P1用例"), Priority2(3, "P2用例"); 12 | 13 | private Integer value; 14 | private String name; 15 | 16 | PriorityEnum(Integer value, String name) { 17 | this.value = value; 18 | this.name = name; 19 | } 20 | 21 | public Integer getValue() { 22 | return value; 23 | } 24 | 25 | public String getName() { 26 | return name; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/constants/enums/ProgressEnum.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.constants.enums; 2 | 3 | /** 4 | * 脑图中,执行任务的执行结果枚举类 5 | * 6 | * @author 刘智 7 | * @date 2020/8/13 8 | */ 9 | public enum ProgressEnum { 10 | // 枚举类 11 | FAIL(1), IGNORE(4), BLOCK(5), SUCCESS(9), DEFAULT(0); 12 | 13 | private Integer progress; 14 | 15 | ProgressEnum(Integer progress) { 16 | this.progress = progress; 17 | } 18 | 19 | public Integer getProgress() { 20 | return progress; 21 | } 22 | 23 | public void setProgress(Integer progress) { 24 | this.progress = progress; 25 | } 26 | 27 | public static ProgressEnum findEnumByProgress(Integer progress) { 28 | for (ProgressEnum progressEnum : ProgressEnum.values()) { 29 | if (progressEnum.getProgress().equals(progress)) { 30 | return progressEnum; 31 | } 32 | } 33 | return DEFAULT; 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/constants/enums/StatusCode.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.constants.enums; 2 | 3 | import com.xiaoju.framework.entity.response.controller.Status; 4 | 5 | /** 6 | * 自定义前后端传输编码 7 | * 8 | * @author 刘智 9 | * @date 2020/9/29 10 | */ 11 | public enum StatusCode implements Status { 12 | // 枚举 13 | // 这里的200不建议改,如果需要改,前端组件判断success的判断也需要更改,单纯兼容,如果有代码洁癖可以改为10000 14 | SERVICE_RUN_SUCCESS(200, "服务运行成功"), JSON_FORMAT_ERROR(10004, "JSON格式不正确"), DATA_FORMAT_ERROR(10005, "数据格式化异常"), 15 | HTTP_ACCESS_ERROR(10006, "HTTP访问异常"), FILE_FORMAT_ERROR(10007, "文件格式不对,请上传xmind文件"), 16 | FILE_IMPORT_ERROR(10008, "导入失败,请稍后再试"), FILE_EXPORT_ERROR(10009, "导出失败,请稍后再试"), NODE_ALREADY_EXISTS(20001, "节点已存在"), 17 | WS_UNKNOWN_ERROR(100010, "websocket访问异常"), AUTHORITY_ERROR(100011, "权限认证错误"), ASPECT_ERROR(100012, "权限内部处理错误"), 18 | 19 | // 内部异常 20 | INTERNAL_ERROR(10400, "内部参数校验或逻辑出错"), VERSION_NOT_MATCH(10500, "暂不支持xmind zen版本,请上传xmind 8版本文件"), 21 | NOT_FOUND_ENTITY(10600, "没有该项数据"), 22 | 23 | // 统一异常 24 | SERVER_BUSY_ERROR(99999, "服务器正忙,请稍后再试"); 25 | 26 | private int status; 27 | private String msg; 28 | 29 | StatusCode(int status, String message) { 30 | this.status = status; 31 | this.msg = message; 32 | } 33 | 34 | @Override 35 | public boolean isSuccess() { 36 | return getStatus() == 10000; 37 | } 38 | 39 | @Override 40 | public int getStatus() { 41 | return status; 42 | } 43 | 44 | @Override 45 | public String getCode() { 46 | return name(); 47 | } 48 | 49 | @Override 50 | public String getMsg() { 51 | return String.format(msg, ""); 52 | } 53 | 54 | @Override 55 | public String getMsg(Object... objects) { 56 | if (objects == null) { 57 | return getMsg(); 58 | } 59 | 60 | return String.format(msg, objects); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/controller/WebController.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.controller; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | 8 | /** 9 | * 重定向 10 | * 11 | * @author 刘智 12 | * @date 2020/9/3 13 | */ 14 | @Controller 15 | public class WebController { 16 | @RequestMapping("/") 17 | public String home() { 18 | return "index"; 19 | } 20 | 21 | @RequestMapping("/login") 22 | public String login() { 23 | return "index"; 24 | } 25 | 26 | @RequestMapping("/history/*") 27 | public String history() { 28 | return "index"; 29 | } 30 | 31 | @RequestMapping("/caseManager/historyContrast/*/*") 32 | public String historyContrast() { 33 | return "index"; 34 | } 35 | 36 | @RequestMapping("/case/caseList/1") 37 | public String index(HttpServletRequest request) { 38 | return "index"; 39 | } 40 | 41 | @RequestMapping(value = "/test/1/*") 42 | public String requirementId(HttpServletRequest request) { 43 | return "index"; 44 | } 45 | 46 | @RequestMapping(value = "/caseManager/1/*/*/*") 47 | public String tcRecord(HttpServletRequest request) { 48 | return "index"; 49 | } 50 | 51 | @RequestMapping(value = "/caseManager/1/*/*") 52 | public String tcCase(HttpServletRequest request) { 53 | return "index"; 54 | } 55 | 56 | @RequestMapping(value = "/api/file/*") 57 | public String file(HttpServletRequest request) { 58 | System.out.println("pre request"); 59 | return "index"; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/dto/Authority.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.dto; 2 | 3 | import java.util.Date; 4 | 5 | public class Authority { 6 | private Long id; 7 | 8 | private String authorityName; 9 | 10 | private String authorityDesc; 11 | 12 | private String authorityContent; 13 | 14 | private Date gmtCreated; 15 | 16 | private Date gmtUpdated; 17 | 18 | public Long getId() { 19 | return id; 20 | } 21 | 22 | public void setId(Long id) { 23 | this.id = id; 24 | } 25 | 26 | public String getAuthorityName() { 27 | return authorityName; 28 | } 29 | 30 | public void setAuthorityName(String authorityName) { 31 | this.authorityName = authorityName == null ? null : authorityName.trim(); 32 | } 33 | 34 | public String getAuthorityDesc() { 35 | return authorityDesc; 36 | } 37 | 38 | public void setAuthorityDesc(String authorityDesc) { 39 | this.authorityDesc = authorityDesc == null ? null : authorityDesc.trim(); 40 | } 41 | 42 | public String getAuthorityContent() { 43 | return authorityContent; 44 | } 45 | 46 | public void setAuthorityContent(String authorityContent) { 47 | this.authorityContent = authorityContent == null ? null : authorityContent.trim(); 48 | } 49 | 50 | public Date getGmtCreated() { 51 | return gmtCreated; 52 | } 53 | 54 | public void setGmtCreated(Date gmtCreated) { 55 | this.gmtCreated = gmtCreated; 56 | } 57 | 58 | public Date getGmtUpdated() { 59 | return gmtUpdated; 60 | } 61 | 62 | public void setGmtUpdated(Date gmtUpdated) { 63 | this.gmtUpdated = gmtUpdated; 64 | } 65 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/dto/DirNodeDto.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.dto; 2 | 3 | import com.xiaoju.framework.service.impl.RecordServiceImpl; 4 | import lombok.Data; 5 | 6 | import java.util.ArrayList; 7 | import java.util.HashSet; 8 | import java.util.List; 9 | import java.util.Set; 10 | 11 | /** 12 | * 文件夹节点转换体 13 | * 14 | * @author 刘智 15 | * @date 2020/10/28 16 | * @see RecordServiceImpl#getData(com.xiaoju.framework.entity.dto.MergeCaseDto) 17 | */ 18 | @Data 19 | public class DirNodeDto { 20 | 21 | private String id; 22 | private String text; 23 | private String parentId; 24 | private Set caseIds = new HashSet<>(); 25 | 26 | private List children = new ArrayList<>(); 27 | 28 | public String getId() { 29 | return id; 30 | } 31 | 32 | public void setId(String id) { 33 | this.id = id; 34 | } 35 | 36 | public String getText() { 37 | return text; 38 | } 39 | 40 | public void setText(String text) { 41 | this.text = text; 42 | } 43 | 44 | public String getParentId() { 45 | return parentId; 46 | } 47 | 48 | public void setParentId(String parentId) { 49 | this.parentId = parentId; 50 | } 51 | 52 | public Set getCaseIds() { 53 | return caseIds; 54 | } 55 | 56 | public void setCaseIds(Set caseIds) { 57 | this.caseIds = caseIds; 58 | } 59 | 60 | public List getChildren() { 61 | return children; 62 | } 63 | 64 | public void setChildren(List children) { 65 | this.children = children; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/dto/MergeCaseDto.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.dto; 2 | 3 | import com.xiaoju.framework.service.impl.RecordServiceImpl; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | 7 | /** 8 | * 给getData专用的转换体 9 | * 10 | * @author hcy 11 | * @date 2020/10/28 12 | * @see RecordServiceImpl#getData(com.xiaoju.framework.entity.dto.MergeCaseDto) 13 | */ 14 | @Data 15 | // @AllArgsConstructor 16 | public class MergeCaseDto { 17 | 18 | private Long caseId; 19 | 20 | private String chooseContent; 21 | 22 | private String recordContent; 23 | 24 | private Integer env; 25 | 26 | private Long recordId; 27 | 28 | public MergeCaseDto(Long caseId, String chooseContent, String recordContent, Integer env, Long recordId) { 29 | this.caseId = caseId; 30 | this.chooseContent = chooseContent; 31 | this.recordContent = recordContent; 32 | this.env = env; 33 | this.recordId = recordId; 34 | } 35 | 36 | public Long getCaseId() { 37 | return caseId; 38 | } 39 | 40 | public void setCaseId(Long caseId) { 41 | this.caseId = caseId; 42 | } 43 | 44 | public String getChooseContent() { 45 | return chooseContent; 46 | } 47 | 48 | public void setChooseContent(String chooseContent) { 49 | this.chooseContent = chooseContent; 50 | } 51 | 52 | public String getRecordContent() { 53 | return recordContent; 54 | } 55 | 56 | public void setRecordContent(String recordContent) { 57 | this.recordContent = recordContent; 58 | } 59 | 60 | public Integer getEnv() { 61 | return env; 62 | } 63 | 64 | public void setEnv(Integer env) { 65 | this.env = env; 66 | } 67 | 68 | public Long getRecordId() { 69 | return recordId; 70 | } 71 | 72 | public void setRecordId(Long recordId) { 73 | this.recordId = recordId; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/dto/PickCaseDto.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.dto; 2 | 3 | import com.xiaoju.framework.controller.CaseController; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 圈选用例所需要用到的结构体 10 | * 11 | * @author hcy 12 | * @date 2020/10/28 13 | * @see CaseController#getCountByCondition(java.lang.Long, java.lang.String[], 14 | * java.lang.String[]) 15 | */ 16 | @Data 17 | public class PickCaseDto { 18 | 19 | /** 20 | * 优先级 ["0", "1", "2"....] 21 | */ 22 | private List priority; 23 | 24 | /** 25 | * 资源 ["用户自己", "在测试用例中", "定义的标签"] 26 | */ 27 | private List resource; 28 | 29 | public List getPriority() { 30 | return priority; 31 | } 32 | 33 | public void setPriority(List priority) { 34 | this.priority = priority; 35 | } 36 | 37 | public List getResource() { 38 | return resource; 39 | } 40 | 41 | public void setResource(List resource) { 42 | this.resource = resource; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/dto/RecordNumDto.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 执行任务数量转换体 7 | * 8 | * @author 刘智 9 | * @date 2020/6/9 10 | */ 11 | @Data 12 | public class RecordNumDto { 13 | 14 | /** 15 | * 所属用例id 16 | */ 17 | Long caseId; 18 | 19 | /** 20 | * 任务数量 21 | */ 22 | Integer recordNum; 23 | 24 | public Long getCaseId() { 25 | return caseId; 26 | } 27 | 28 | public void setCaseId(Long caseId) { 29 | this.caseId = caseId; 30 | } 31 | 32 | public Integer getRecordNum() { 33 | return recordNum; 34 | } 35 | 36 | public void setRecordNum(Integer recordNum) { 37 | this.recordNum = recordNum; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/dto/RecordWsDto.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Date; 6 | 7 | /** 8 | * 任务的一个简单转换体 9 | * 10 | * @author hcy 11 | * @date 2020/10/29 12 | */ 13 | @Data 14 | public class RecordWsDto { 15 | 16 | private Date updateTime; 17 | 18 | private String executors; 19 | 20 | private Integer env; 21 | 22 | private String caseContent; 23 | 24 | private String chooseContent; 25 | 26 | public Date getUpdateTime() { 27 | return updateTime; 28 | } 29 | 30 | public void setUpdateTime(Date updateTime) { 31 | this.updateTime = updateTime; 32 | } 33 | 34 | public String getExecutors() { 35 | return executors; 36 | } 37 | 38 | public void setExecutors(String executors) { 39 | this.executors = executors; 40 | } 41 | 42 | public Integer getEnv() { 43 | return env; 44 | } 45 | 46 | public void setEnv(Integer env) { 47 | this.env = env; 48 | } 49 | 50 | public String getCaseContent() { 51 | return caseContent; 52 | } 53 | 54 | public void setCaseContent(String caseContent) { 55 | this.caseContent = caseContent; 56 | } 57 | 58 | public String getChooseContent() { 59 | return chooseContent; 60 | } 61 | 62 | public void setChooseContent(String chooseContent) { 63 | this.chooseContent = chooseContent; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/exception/CaseServerException.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.exception; 2 | 3 | import com.xiaoju.framework.entity.response.controller.Status; 4 | 5 | /** 6 | * 自定义异常类,用于封装程序内部可判断出来的Exception 7 | * 8 | * @author 刘智 9 | * @date 2020/9/24 10 | */ 11 | public class CaseServerException extends RuntimeException { 12 | 13 | private Status status; 14 | 15 | public CaseServerException(Status status) { 16 | this.status = status; 17 | } 18 | 19 | public CaseServerException(String message, Status status) { 20 | super(message); 21 | this.status = status; 22 | } 23 | 24 | public CaseServerException(String message, Throwable cause, Status status) { 25 | super(message, cause); 26 | this.status = status; 27 | } 28 | 29 | public CaseServerException(Throwable cause, Status status) { 30 | super(cause); 31 | this.status = status; 32 | } 33 | 34 | public CaseServerException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, 35 | Status status) { 36 | super(message, cause, enableSuppression, writableStackTrace); 37 | this.status = status; 38 | } 39 | 40 | public Status getStatus() { 41 | return status; 42 | } 43 | 44 | public void setStatus(Status status) { 45 | this.status = status; 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/persistent/Biz.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.persistent; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Date; 6 | 7 | /** 8 | * 文件夹 9 | * 10 | * 一个业务线有一条自己的文件夹数据,这里采用json去存储 11 | * 12 | * @author 刘智 13 | * @date 2020/09/09 14 | */ 15 | @Data 16 | public class Biz { 17 | 18 | /** 19 | * id 20 | */ 21 | private Long id; 22 | 23 | /** 24 | * 业务线id 25 | */ 26 | private Long productLineId; 27 | 28 | /** 29 | * channel 当前默认1 30 | */ 31 | private Integer channel; 32 | 33 | private Integer isDelete; 34 | 35 | private Date gmtModified; 36 | 37 | private Date gmtCreated; 38 | 39 | /** 40 | * 存储的内容 41 | */ 42 | private String content; 43 | 44 | public Long getId() { 45 | return id; 46 | } 47 | 48 | public void setId(Long id) { 49 | this.id = id; 50 | } 51 | 52 | public Long getProductLineId() { 53 | return productLineId; 54 | } 55 | 56 | public void setProductLineId(Long productLineId) { 57 | this.productLineId = productLineId; 58 | } 59 | 60 | public Integer getChannel() { 61 | return channel; 62 | } 63 | 64 | public void setChannel(Integer channel) { 65 | this.channel = channel; 66 | } 67 | 68 | public Integer getIsDelete() { 69 | return isDelete; 70 | } 71 | 72 | public void setIsDelete(Integer isDelete) { 73 | this.isDelete = isDelete; 74 | } 75 | 76 | public Date getGmtModified() { 77 | return gmtModified; 78 | } 79 | 80 | public void setGmtModified(Date gmtModified) { 81 | this.gmtModified = gmtModified; 82 | } 83 | 84 | public Date getGmtCreated() { 85 | return gmtCreated; 86 | } 87 | 88 | public void setGmtCreated(Date gmtCreated) { 89 | this.gmtCreated = gmtCreated; 90 | } 91 | 92 | public String getContent() { 93 | return content; 94 | } 95 | 96 | public void setContent(String content) { 97 | this.content = content; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/persistent/CaseBackup.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.persistent; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Date; 6 | 7 | /** 8 | * 备份 9 | * 10 | * @author 刘智 11 | * @date 2019/11/05 12 | */ 13 | @Data 14 | public class CaseBackup { 15 | private Long id; 16 | private Long caseId; 17 | private String title; 18 | private String creator; 19 | private Date gmtCreated; 20 | private String caseContent; 21 | private String recordContent; 22 | private String extra; 23 | private Integer isDelete; 24 | 25 | public Long getId() { 26 | return id; 27 | } 28 | 29 | public void setId(Long id) { 30 | this.id = id; 31 | } 32 | 33 | public Long getCaseId() { 34 | return caseId; 35 | } 36 | 37 | public void setCaseId(Long caseId) { 38 | this.caseId = caseId; 39 | } 40 | 41 | public String getTitle() { 42 | return title; 43 | } 44 | 45 | public void setTitle(String title) { 46 | this.title = title; 47 | } 48 | 49 | public String getCreator() { 50 | return creator; 51 | } 52 | 53 | public void setCreator(String creator) { 54 | this.creator = creator; 55 | } 56 | 57 | public Date getGmtCreated() { 58 | return gmtCreated; 59 | } 60 | 61 | public void setGmtCreated(Date gmtCreated) { 62 | this.gmtCreated = gmtCreated; 63 | } 64 | 65 | public String getCaseContent() { 66 | return caseContent; 67 | } 68 | 69 | public void setCaseContent(String caseContent) { 70 | this.caseContent = caseContent; 71 | } 72 | 73 | public String getRecordContent() { 74 | return recordContent; 75 | } 76 | 77 | public void setRecordContent(String recordContent) { 78 | this.recordContent = recordContent; 79 | } 80 | 81 | public String getExtra() { 82 | return extra; 83 | } 84 | 85 | public void setExtra(String extra) { 86 | this.extra = extra; 87 | } 88 | 89 | public Integer getIsDelete() { 90 | return isDelete; 91 | } 92 | 93 | public void setIsDelete(Integer isDelete) { 94 | this.isDelete = isDelete; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/ParamValidate.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request; 2 | 3 | /** 4 | * 校验入参的接口 5 | * 6 | * @author 刘智 7 | * @date 2020/9/16 8 | */ 9 | public interface ParamValidate { 10 | 11 | /** 12 | * 检验函数 13 | */ 14 | void validate(); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/auth/UserLoginReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.auth; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * Created by 刘智 on 2021/4/22. 7 | */ 8 | @Data 9 | public class UserLoginReq { 10 | private String username; 11 | 12 | private String password; 13 | 14 | private boolean isLogin; 15 | 16 | public String getUsername() { 17 | return username; 18 | } 19 | 20 | public String getPassword() { 21 | return password; 22 | } 23 | 24 | public boolean getIsLogin() { 25 | return isLogin; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/auth/UserRegisterReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.auth; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * Created by 刘智 on 2021/4/22. 7 | */ 8 | @Data 9 | public class UserRegisterReq { 10 | private String username; 11 | 12 | private String password; 13 | 14 | private String newpassword; 15 | 16 | private boolean isLogin; 17 | 18 | public String getUsername() { 19 | return username; 20 | } 21 | 22 | public void setUsername(String username) { 23 | this.username = username; 24 | } 25 | 26 | public String getPassword() { 27 | return password; 28 | } 29 | 30 | public void setPassword(String password) { 31 | this.password = password; 32 | } 33 | 34 | public String getNewpassword() { 35 | return newpassword; 36 | } 37 | 38 | public void setNewpassword(String newpassword) { 39 | this.newpassword = newpassword; 40 | } 41 | 42 | public boolean isLogin() { 43 | return isLogin; 44 | } 45 | 46 | public void setLogin(boolean isLogin) { 47 | this.isLogin = isLogin; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/cases/CaseConditionReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.cases; 2 | 3 | import com.xiaoju.framework.entity.request.ParamValidate; 4 | import lombok.Data; 5 | 6 | import java.util.Arrays; 7 | import java.util.List; 8 | import java.util.stream.Collectors; 9 | 10 | /** 11 | * 编辑页面-根据条件筛选用例中的条目 12 | * 13 | * @author 刘智 14 | * @date 2020/10/21 15 | */ 16 | @Data 17 | public class CaseConditionReq implements ParamValidate { 18 | 19 | /** 20 | * 要针对搜索的用例id 21 | */ 22 | private Long caseId; 23 | 24 | /** 25 | * 想要框选的优先级 26 | */ 27 | private List priority; 28 | 29 | /** 30 | * 想要框选的自定义标签 如果用例内部没有标签,这里就不会有东西 31 | */ 32 | private List resource; 33 | 34 | @Override 35 | public void validate() { 36 | if (caseId == null || caseId <= 0) { 37 | throw new IllegalArgumentException("用例id为空或者非法"); 38 | } 39 | 40 | } 41 | 42 | public CaseConditionReq(Long caseId, String[] priority, String[] resource) { 43 | this.caseId = caseId; 44 | if (priority == null) { 45 | throw new IllegalArgumentException("圈选优先级为空"); 46 | } 47 | if (resource == null) { 48 | throw new IllegalArgumentException("圈选资源为空"); 49 | } 50 | this.priority = Arrays.stream(priority).collect(Collectors.toList()); 51 | this.resource = Arrays.stream(resource).collect(Collectors.toList()); 52 | ; 53 | } 54 | 55 | public Long getCaseId() { 56 | return caseId; 57 | } 58 | 59 | public void setCaseId(Long caseId) { 60 | this.caseId = caseId; 61 | } 62 | 63 | public List getPriority() { 64 | return priority; 65 | } 66 | 67 | public void setPriority(List priority) { 68 | this.priority = priority; 69 | } 70 | 71 | public List getResource() { 72 | return resource; 73 | } 74 | 75 | public void setResource(List resource) { 76 | this.resource = resource; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/cases/CaseDeleteReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.cases; 2 | 3 | import com.xiaoju.framework.entity.request.ParamValidate; 4 | import lombok.Data; 5 | 6 | /** 7 | * 用例 逻辑删除 8 | * 9 | * @author hcy 10 | * @date 2020/9/7 11 | */ 12 | @Data 13 | public class CaseDeleteReq implements ParamValidate { 14 | 15 | private Long id; 16 | 17 | @Override 18 | public void validate() { 19 | if (id == null || id <= 0) { 20 | throw new IllegalArgumentException("用例id为空"); 21 | } 22 | } 23 | 24 | public Long getId() { 25 | return id; 26 | } 27 | 28 | public void setId(Long id) { 29 | this.id = id; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/dir/DirCreateReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.dir; 2 | 3 | import com.xiaoju.framework.entity.request.ParamValidate; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import org.springframework.util.StringUtils; 7 | 8 | /** 9 | * 文件夹 新增 10 | * 11 | * @author 刘智 12 | * @date 2020/9/11 13 | */ 14 | @Data 15 | @AllArgsConstructor 16 | public class DirCreateReq implements ParamValidate { 17 | 18 | /** 19 | * 如果要给A文件夹添加同级,则取A的父级id 如果要给A文件夹添加子级,则取A的当前id 20 | */ 21 | private String parentId; 22 | 23 | private Long productLineId; 24 | 25 | private String text; 26 | 27 | private Integer channel; 28 | 29 | @Override 30 | public void validate() { 31 | if (StringUtils.isEmpty(parentId)) { 32 | throw new IllegalArgumentException("请选择正确的节点进行创建"); 33 | } 34 | if (productLineId == null || productLineId <= 0) { 35 | throw new IllegalArgumentException("业务线id为空或者非法"); 36 | } 37 | if (StringUtils.isEmpty(text)) { 38 | throw new IllegalArgumentException("文件夹名称不能为空"); 39 | } 40 | if (channel == null) { 41 | throw new IllegalArgumentException("渠道为空"); 42 | } 43 | } 44 | 45 | public String getParentId() { 46 | return parentId; 47 | } 48 | 49 | public void setParentId(String parentId) { 50 | this.parentId = parentId; 51 | } 52 | 53 | public Long getProductLineId() { 54 | return productLineId; 55 | } 56 | 57 | public void setProductLineId(Long productLineId) { 58 | this.productLineId = productLineId; 59 | } 60 | 61 | public String getText() { 62 | return text; 63 | } 64 | 65 | public void setText(String text) { 66 | this.text = text; 67 | } 68 | 69 | public Integer getChannel() { 70 | return channel; 71 | } 72 | 73 | public void setChannel(Integer channel) { 74 | this.channel = channel; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/dir/DirDeleteReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.dir; 2 | 3 | import com.xiaoju.framework.constants.BizConstant; 4 | import com.xiaoju.framework.entity.request.ParamValidate; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import org.springframework.util.StringUtils; 8 | 9 | /** 10 | * 文件夹 删除 11 | * 12 | * @author 刘智 13 | * @date 2020/9/11 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | public class DirDeleteReq implements ParamValidate { 18 | 19 | private String parentId; 20 | 21 | private Long productLineId; 22 | 23 | private String delId; 24 | 25 | private Integer channel; 26 | 27 | @Override 28 | public void validate() { 29 | if (productLineId == null || productLineId <= 0) { 30 | throw new IllegalArgumentException("业务线id为空或者非法"); 31 | } 32 | if (StringUtils.isEmpty(delId)) { 33 | throw new IllegalArgumentException("要删除的文件夹id不能为空"); 34 | } 35 | if (BizConstant.ROOT_BIZ_ID.equals(delId)) { 36 | throw new IllegalArgumentException("不能删除根文件夹"); 37 | } 38 | if (StringUtils.isEmpty(parentId)) { 39 | throw new IllegalArgumentException("父文件夹id为空"); 40 | } 41 | if (channel == null) { 42 | throw new IllegalArgumentException("渠道为空"); 43 | } 44 | } 45 | 46 | public String getParentId() { 47 | return parentId; 48 | } 49 | 50 | public void setParentId(String parentId) { 51 | this.parentId = parentId; 52 | } 53 | 54 | public Long getProductLineId() { 55 | return productLineId; 56 | } 57 | 58 | public void setProductLineId(Long productLineId) { 59 | this.productLineId = productLineId; 60 | } 61 | 62 | public String getDelId() { 63 | return delId; 64 | } 65 | 66 | public void setDelId(String delId) { 67 | this.delId = delId; 68 | } 69 | 70 | public Integer getChannel() { 71 | return channel; 72 | } 73 | 74 | public void setChannel(Integer channel) { 75 | this.channel = channel; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/dir/DirRenameReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.dir; 2 | 3 | import com.xiaoju.framework.entity.request.ParamValidate; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import org.springframework.util.StringUtils; 7 | 8 | import static com.xiaoju.framework.constants.BizConstant.UNSORTED_BIZ_ID; 9 | 10 | /** 11 | * 文件夹 重命名 12 | * 13 | * @author 刘智 14 | * @date 2020/9/11 15 | */ 16 | @Data 17 | @AllArgsConstructor 18 | public class DirRenameReq implements ParamValidate { 19 | 20 | private String id; 21 | 22 | private Long productLineId; 23 | 24 | private String text; 25 | 26 | private Integer channel; 27 | 28 | @Override 29 | public void validate() { 30 | if (UNSORTED_BIZ_ID.equals(id) || StringUtils.isEmpty(id)) { 31 | throw new IllegalArgumentException("请选择正确的节点进行重命名"); 32 | } 33 | if (productLineId == null || productLineId <= 0) { 34 | throw new IllegalArgumentException("业务线id为空或者非法"); 35 | } 36 | if (StringUtils.isEmpty(text)) { 37 | throw new IllegalArgumentException("文件夹名称不能为空"); 38 | } 39 | if (channel == null) { 40 | throw new IllegalArgumentException("渠道为空"); 41 | } 42 | } 43 | 44 | public String getId() { 45 | return id; 46 | } 47 | 48 | public void setId(String id) { 49 | this.id = id; 50 | } 51 | 52 | public Long getProductLineId() { 53 | return productLineId; 54 | } 55 | 56 | public void setProductLineId(Long productLineId) { 57 | this.productLineId = productLineId; 58 | } 59 | 60 | public String getText() { 61 | return text; 62 | } 63 | 64 | public void setText(String text) { 65 | this.text = text; 66 | } 67 | 68 | public Integer getChannel() { 69 | return channel; 70 | } 71 | 72 | public void setChannel(Integer channel) { 73 | this.channel = channel; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/record/RecordDeleteReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.record; 2 | 3 | import com.xiaoju.framework.entity.request.ParamValidate; 4 | import lombok.Data; 5 | 6 | /** 7 | * 任务删除 8 | * 9 | * @author hcy 10 | * @date 2020/10/28 11 | */ 12 | @Data 13 | public class RecordDeleteReq implements ParamValidate { 14 | 15 | private Long id; 16 | 17 | @Override 18 | public void validate() { 19 | if (id == null || id <= 0) { 20 | throw new IllegalArgumentException("任务id为空或不正确"); 21 | } 22 | } 23 | 24 | public Long getId() { 25 | return id; 26 | } 27 | 28 | public void setId(Long id) { 29 | this.id = id; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/record/RecordQueryReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.record; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * 任务 查询列表 10 | * 11 | * @author hcy 12 | * @date 2020/8/24 13 | */ 14 | @Data 15 | public class RecordQueryReq { 16 | 17 | private Integer channel; 18 | 19 | private List reqIds; 20 | 21 | private Integer pageNum; 22 | 23 | private Integer pageSize; 24 | 25 | public RecordQueryReq(Integer channel, String[] reqIds, Integer pageNum, Integer pageSize) { 26 | // String[]转为List 27 | List reqIdList = new ArrayList<>(); 28 | for (String reqId : reqIds) { 29 | reqIdList.add(Long.valueOf(reqId)); 30 | } 31 | this.channel = channel; 32 | this.reqIds = reqIdList; 33 | this.pageNum = pageNum; 34 | this.pageSize = pageSize; 35 | } 36 | 37 | public Integer getChannel() { 38 | return channel; 39 | } 40 | 41 | public void setChannel(Integer channel) { 42 | this.channel = channel; 43 | } 44 | 45 | public List getReqIds() { 46 | return reqIds; 47 | } 48 | 49 | public void setReqIds(List reqIds) { 50 | this.reqIds = reqIds; 51 | } 52 | 53 | public Integer getPageNum() { 54 | return pageNum; 55 | } 56 | 57 | public void setPageNum(Integer pageNum) { 58 | this.pageNum = pageNum; 59 | } 60 | 61 | public Integer getPageSize() { 62 | return pageSize; 63 | } 64 | 65 | public void setPageSize(Integer pageSize) { 66 | this.pageSize = pageSize; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/ws/RecordWsClearReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.ws; 2 | 3 | import com.xiaoju.framework.entity.request.ParamValidate; 4 | import lombok.Data; 5 | import org.springframework.util.StringUtils; 6 | 7 | /** 8 | * 任务 脑图当中清理执行记录的按钮 9 | * 10 | * @author hcy 11 | * @date 2020/10/29 12 | */ 13 | @Data 14 | public class RecordWsClearReq implements ParamValidate { 15 | 16 | private Long id; 17 | 18 | private String modifier; 19 | 20 | @Override 21 | public void validate() { 22 | if (id == null || id <= 0) { 23 | throw new IllegalArgumentException("任务id为空或非法"); 24 | } 25 | if (StringUtils.isEmpty(modifier)) { 26 | throw new IllegalArgumentException("修改人为空"); 27 | } 28 | } 29 | 30 | public Long getId() { 31 | return id; 32 | } 33 | 34 | public void setId(Long id) { 35 | this.id = id; 36 | } 37 | 38 | public String getModifier() { 39 | return modifier; 40 | } 41 | 42 | public void setModifier(String modifier) { 43 | this.modifier = modifier; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/request/ws/WsSaveReq.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.request.ws; 2 | 3 | import com.xiaoju.framework.entity.request.ParamValidate; 4 | import lombok.Data; 5 | import org.springframework.util.StringUtils; 6 | 7 | /** 8 | * 脑图页面保存用例/任务的请求体 9 | * 10 | * @author 刘智 11 | * @date 2020/11/25 12 | */ 13 | @Data 14 | public class WsSaveReq implements ParamValidate { 15 | 16 | /** 17 | * 传进来的是当前脑图的caseContent 可能是record的也可能是testcase的 18 | */ 19 | private String caseContent; 20 | 21 | private Long id; 22 | 23 | private String modifier; 24 | 25 | /** 26 | * 如果是用例页面 则传进来是null 如果是任务页面 则传进来具体的任务id 27 | */ 28 | private Long recordId; 29 | 30 | @Override 31 | public void validate() { 32 | if (StringUtils.isEmpty(caseContent)) { 33 | throw new IllegalArgumentException("保存的内容为空"); 34 | } 35 | if (id == null || id <= 0) { 36 | throw new IllegalArgumentException("用例id为空"); 37 | } 38 | if (StringUtils.isEmpty(modifier)) { 39 | throw new IllegalArgumentException("修改人为空"); 40 | } 41 | } 42 | 43 | public String getCaseContent() { 44 | return caseContent; 45 | } 46 | 47 | public void setCaseContent(String caseContent) { 48 | this.caseContent = caseContent; 49 | } 50 | 51 | public Long getId() { 52 | return id; 53 | } 54 | 55 | public void setId(Long id) { 56 | this.id = id; 57 | } 58 | 59 | public String getModifier() { 60 | return modifier; 61 | } 62 | 63 | public void setModifier(String modifier) { 64 | this.modifier = modifier; 65 | } 66 | 67 | public Long getRecordId() { 68 | return recordId; 69 | } 70 | 71 | public void setRecordId(Long recordId) { 72 | this.recordId = recordId; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/PersonResp.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 返回的人员 7 | * 8 | * @author 刘智 9 | * @date 2020/11/24 10 | */ 11 | @Data 12 | public class PersonResp { 13 | 14 | /** 15 | * 前缀 16 | */ 17 | private String staffNamePY; 18 | 19 | /** 20 | * 中文名 21 | */ 22 | private String staffNameCN; 23 | 24 | public String getStaffNamePY() { 25 | return staffNamePY; 26 | } 27 | 28 | public void setStaffNamePY(String staffNamePY) { 29 | this.staffNamePY = staffNamePY; 30 | } 31 | 32 | public String getStaffNameCN() { 33 | return staffNameCN; 34 | } 35 | 36 | public void setStaffNameCN(String staffNameCN) { 37 | this.staffNameCN = staffNameCN; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/cases/CaseConditionResp.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response.cases; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Set; 6 | 7 | /** 8 | * 编辑页面-条件筛选后的结果内容 9 | * 10 | * @author hcy 11 | * @date 2020/10/21 12 | */ 13 | @Data 14 | public class CaseConditionResp { 15 | 16 | /** 17 | * 符合条件的用例数 18 | */ 19 | private Integer count; 20 | 21 | /** 22 | * 所有用例数 23 | */ 24 | private Integer totalCount; 25 | 26 | /** 27 | * 有哪些resource标签 28 | */ 29 | private Set taglist; 30 | 31 | public Integer getCount() { 32 | return count; 33 | } 34 | 35 | public void setCount(Integer count) { 36 | this.count = count; 37 | } 38 | 39 | public Integer getTotalCount() { 40 | return totalCount; 41 | } 42 | 43 | public void setTotalCount(Integer totalCount) { 44 | this.totalCount = totalCount; 45 | } 46 | 47 | public Set getTaglist() { 48 | return taglist; 49 | } 50 | 51 | public void setTaglist(Set taglist) { 52 | this.taglist = taglist; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/cases/CaseGeneralInfoResp.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response.cases; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 脑图-查看用例上方的概览信息(不包括content) 7 | * 8 | * @author hcy 9 | * @date 2020/10/22 10 | */ 11 | @Data 12 | public class CaseGeneralInfoResp { 13 | 14 | private Long id; 15 | 16 | private String title; 17 | 18 | private String requirementId; 19 | 20 | private Long productLineId; 21 | 22 | public Long getId() { 23 | return id; 24 | } 25 | 26 | public void setId(Long id) { 27 | this.id = id; 28 | } 29 | 30 | public String getTitle() { 31 | return title; 32 | } 33 | 34 | public void setTitle(String title) { 35 | this.title = title; 36 | } 37 | 38 | public String getRequirementId() { 39 | return requirementId; 40 | } 41 | 42 | public void setRequirementId(String requirementId) { 43 | this.requirementId = requirementId; 44 | } 45 | 46 | public Long getProductLineId() { 47 | return productLineId; 48 | } 49 | 50 | public void setProductLineId(Long productLineId) { 51 | this.productLineId = productLineId; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/cases/ExportXmindResp.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response.cases; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 导出的xmind所含有的内容 7 | * 8 | * @author hcy 9 | * @date 2020/10/27 10 | */ 11 | @Data 12 | public class ExportXmindResp { 13 | 14 | private String fileName; 15 | 16 | private byte[] data; 17 | 18 | public String getFileName() { 19 | return fileName; 20 | } 21 | 22 | public void setFileName(String fileName) { 23 | this.fileName = fileName; 24 | } 25 | 26 | public byte[] getData() { 27 | return data; 28 | } 29 | 30 | public void setData(byte[] data) { 31 | this.data = data; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/controller/PageModule.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response.controller; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | /** 10 | * 分页 11 | * 12 | * @author 刘智 13 | * @date 2020/7/30 14 | */ 15 | @Data 16 | public class PageModule implements Serializable { 17 | 18 | private static final long serialVersionUID = -3504431894726195820L; 19 | 20 | private List dataSources; 21 | 22 | private Long total; 23 | 24 | public static PageModule buildPage(List dataSource, Long total) { 25 | PageModule obj = new PageModule<>(); 26 | obj.setDataSources(dataSource); 27 | obj.setTotal(total); 28 | return obj; 29 | } 30 | 31 | public static PageModule emptyPage() { 32 | PageModule obj = new PageModule<>(); 33 | obj.setDataSources(new ArrayList<>()); 34 | obj.setTotal(0L); 35 | return obj; 36 | } 37 | 38 | public static long getSerialversionuid() { 39 | return serialVersionUID; 40 | } 41 | 42 | public List getDataSources() { 43 | return dataSources; 44 | } 45 | 46 | public void setDataSources(List dataSources) { 47 | this.dataSources = dataSources; 48 | } 49 | 50 | public Long getTotal() { 51 | return total; 52 | } 53 | 54 | public void setTotal(Long total) { 55 | this.total = total; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/controller/Response.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response.controller; 2 | 3 | import com.xiaoju.framework.constants.enums.StatusCode; 4 | import lombok.Data; 5 | 6 | /** 7 | * controller层统一响应体 8 | * 9 | * @author 刘智 10 | * @date 2020/9/24 11 | */ 12 | @Data 13 | public class Response { 14 | private Integer code; 15 | private String msg; 16 | private T data; 17 | 18 | public Response() { 19 | this.code = StatusCode.SERVICE_RUN_SUCCESS.getStatus(); 20 | } 21 | 22 | public static Response build(Status status) { 23 | return build(status.getStatus(), status.getMsg(), null); 24 | } 25 | 26 | public static Response build(Status status, String msg) { 27 | return build(status.getStatus(), msg, null); 28 | } 29 | 30 | public static Response build(int status, String msg) { 31 | return build(status, msg, null); 32 | } 33 | 34 | public static Response build(int status, String msg, T data) { 35 | Response response = new Response<>(); 36 | response.setCode(status); 37 | response.setMsg(msg); 38 | response.setData(data); 39 | return response; 40 | } 41 | 42 | public static Response success() { 43 | return build(StatusCode.SERVICE_RUN_SUCCESS); 44 | } 45 | 46 | public static Response success(T data) { 47 | return build(StatusCode.SERVICE_RUN_SUCCESS.getStatus(), StatusCode.SERVICE_RUN_SUCCESS.getMsg(), data); 48 | } 49 | 50 | public static Response error(String msg) { 51 | return build(StatusCode.INTERNAL_ERROR.getStatus(), msg); 52 | } 53 | 54 | public Integer getCode() { 55 | return code; 56 | } 57 | 58 | public void setCode(Integer code) { 59 | this.code = code; 60 | } 61 | 62 | public String getMsg() { 63 | return msg; 64 | } 65 | 66 | public void setMsg(String msg) { 67 | this.msg = msg; 68 | } 69 | 70 | public T getData() { 71 | return data; 72 | } 73 | 74 | public void setData(T data) { 75 | this.data = data; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/controller/Status.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response.controller; 2 | 3 | /** 4 | * controller层统一响应体抽象类 5 | * 6 | * @author 刘智 7 | * @date 2020/12/15 8 | */ 9 | public interface Status { 10 | /** 11 | * 是否成功状态 12 | * 13 | * @return 成功状态,返回true;否则,返回false 14 | */ 15 | boolean isSuccess(); 16 | 17 | /** 18 | * 状态码值 19 | * 20 | * @return 状态码值 21 | */ 22 | int getStatus(); 23 | 24 | /** 25 | * 错误码 26 | * 27 | * @return 错误码 28 | */ 29 | String getCode(); 30 | 31 | /** 32 | * 状态描述 33 | * 34 | * @return 状态描述 35 | */ 36 | String getMsg(); 37 | 38 | /** 39 | * 状态描述 40 | * 41 | * @return 状态描述 42 | */ 43 | String getMsg(Object... format); 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/dir/BizListResp.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response.dir; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 返回给前端的所有文件夹的列表 7 | * 8 | * @author hcy 9 | * @date 2020/9/16 10 | */ 11 | @Data 12 | public class BizListResp { 13 | 14 | private String bizId; 15 | 16 | private String text; 17 | 18 | private boolean select; 19 | 20 | public String getBizId() { 21 | return bizId; 22 | } 23 | 24 | public void setBizId(String bizId) { 25 | this.bizId = bizId; 26 | } 27 | 28 | public String getText() { 29 | return text; 30 | } 31 | 32 | public void setText(String text) { 33 | this.text = text; 34 | } 35 | 36 | public boolean isSelect() { 37 | return select; 38 | } 39 | 40 | public void setSelect(boolean select) { 41 | this.select = select; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/dir/BizNodeResp.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response.dir; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 目录结构 9 | * 10 | * @author hcy 11 | * @date 2020/9/4 12 | */ 13 | @Data 14 | public class BizNodeResp { 15 | 16 | /** 17 | * 文件夹id 18 | */ 19 | private Long bizId; 20 | 21 | /** 22 | * 文件夹名称 23 | */ 24 | private String bizName; 25 | 26 | /** 27 | * 树编号 如果传出-1 表示是<未分类的用例> 28 | */ 29 | private Integer treeNo; 30 | 31 | /** 32 | * 业务线id 33 | */ 34 | private Long lineId; 35 | 36 | /** 37 | * 子列表 38 | */ 39 | private List childs; 40 | 41 | public Long getBizId() { 42 | return bizId; 43 | } 44 | 45 | public void setBizId(Long bizId) { 46 | this.bizId = bizId; 47 | } 48 | 49 | public String getBizName() { 50 | return bizName; 51 | } 52 | 53 | public void setBizName(String bizName) { 54 | this.bizName = bizName; 55 | } 56 | 57 | public Integer getTreeNo() { 58 | return treeNo; 59 | } 60 | 61 | public void setTreeNo(Integer treeNo) { 62 | this.treeNo = treeNo; 63 | } 64 | 65 | public Long getLineId() { 66 | return lineId; 67 | } 68 | 69 | public void setLineId(Long lineId) { 70 | this.lineId = lineId; 71 | } 72 | 73 | public List getChilds() { 74 | return childs; 75 | } 76 | 77 | public void setChilds(List childs) { 78 | this.childs = childs; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/response/dir/DirTreeResp.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.response.dir; 2 | 3 | import com.xiaoju.framework.entity.dto.DirNodeDto; 4 | import lombok.Data; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | /** 10 | * 树结构 11 | * 12 | * @author hcy 13 | * @date 2020/11/11 14 | */ 15 | @Data 16 | public class DirTreeResp { 17 | 18 | private List children = new ArrayList<>(); 19 | 20 | public List getChildren() { 21 | return children; 22 | } 23 | 24 | public void setChildren(List children) { 25 | this.children = children; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/xmind/CaseContent.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.xmind; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 用例实际在websocket中传递的内容 7 | * 8 | * @author 刘智 9 | * @date 2020/8/13 10 | */ 11 | @Data 12 | public class CaseContent { 13 | 14 | private String template; 15 | 16 | private RootData root; 17 | 18 | public String getTemplate() { 19 | return template; 20 | } 21 | 22 | public void setTemplate(String template) { 23 | this.template = template; 24 | } 25 | 26 | public RootData getRoot() { 27 | return root; 28 | } 29 | 30 | public void setRoot(RootData root) { 31 | this.root = root; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/xmind/DataObj.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.xmind; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 任务的json单元 7 | * 8 | * @author 刘智 9 | * @date 2020/8/13 10 | */ 11 | @Data 12 | public class DataObj { 13 | 14 | /** 15 | * 用例行为 阻塞、失败、成功、不执行 16 | */ 17 | private Integer progress; 18 | 19 | /** 20 | * 用例标题 21 | */ 22 | private String text; 23 | 24 | /** 25 | * 节点id 26 | */ 27 | private String id; 28 | 29 | /** 30 | * 备注 31 | */ 32 | private String note; 33 | 34 | /** 35 | * 超链接 36 | */ 37 | private String hyperLink; 38 | 39 | /** 40 | * 超链接文本提示 41 | */ 42 | private String hyperLinkTitle; 43 | 44 | public String getProgressStr() { 45 | return String.valueOf(progress); 46 | } 47 | 48 | public Integer getProgress() { 49 | return progress; 50 | } 51 | 52 | public void setProgress(Integer progress) { 53 | this.progress = progress; 54 | } 55 | 56 | public String getText() { 57 | return text; 58 | } 59 | 60 | public void setText(String text) { 61 | this.text = text; 62 | } 63 | 64 | public String getId() { 65 | return id; 66 | } 67 | 68 | public void setId(String id) { 69 | this.id = id; 70 | } 71 | 72 | public String getNote() { 73 | return note; 74 | } 75 | 76 | public void setNote(String note) { 77 | this.note = note; 78 | } 79 | 80 | public String getHyperLink() { 81 | return hyperLink; 82 | } 83 | 84 | public void setHyperLink(String hyperLink) { 85 | this.hyperLink = hyperLink; 86 | } 87 | 88 | public String getHyperLinkTitle() { 89 | return hyperLinkTitle; 90 | } 91 | 92 | public void setHyperLinkTitle(String hyperLinkTitle) { 93 | this.hyperLinkTitle = hyperLinkTitle; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/xmind/IntCount.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.xmind; 2 | 3 | /** 4 | * 数字封装 5 | * 6 | * @author 刘智 7 | * @date 2019/10/10 8 | */ 9 | public class IntCount { 10 | int value; 11 | 12 | public IntCount(int value) { 13 | this.value = value; 14 | } 15 | 16 | public void add() { 17 | this.value++; 18 | } 19 | 20 | public int get() { 21 | return this.value; 22 | } 23 | 24 | public void del() { 25 | this.value--; 26 | } 27 | 28 | public void set(int value) { 29 | this.value = value; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/entity/xmind/RootData.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.entity.xmind; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 用例的json单元 9 | * 10 | * @author hcy 11 | * @date 2020/8/13 12 | */ 13 | @Data 14 | public class RootData { 15 | 16 | private DataObj data; 17 | 18 | private List children; 19 | 20 | public DataObj getData() { 21 | return data; 22 | } 23 | 24 | public void setData(DataObj data) { 25 | this.data = data; 26 | } 27 | 28 | public List getChildren() { 29 | return children; 30 | } 31 | 32 | public void setChildren(List children) { 33 | this.children = children; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/handler/CaseMessageType.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.handler; 2 | 3 | /** 4 | * Created by 刘智 on 2021/4/4. 5 | */ 6 | public enum CaseMessageType { 7 | PING('0'), EDITOR('1'), CTRL('2'), NOTIFY('3'); 8 | 9 | private final char flag; 10 | 11 | CaseMessageType(char flag) { 12 | this.flag = flag; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/handler/CaseWsMessages.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.handler; 2 | 3 | /** 4 | * Created by 刘智 on 2021/3/22. 5 | */ 6 | public enum CaseWsMessages { 7 | CLIENT_CLOSE(0, "agiletc is closing"), PONG(1, "pong pong pong"), PING(2, "ping ping ping"), 8 | UNDEFINED(3, "undefined"), LOCK(4, "lock"), UNLOCK(5, "unlock"); 9 | 10 | private Integer value; 11 | private String msg; 12 | 13 | CaseWsMessages(Integer value, String msg) { 14 | this.value = value; 15 | this.msg = msg; 16 | } 17 | 18 | public String getMsg() { 19 | return msg; 20 | } 21 | 22 | public Integer getValue() { 23 | return value; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/listener/IocCloseListener.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.listener; 2 | 3 | import com.xiaoju.framework.handler.WebSocket; 4 | import lombok.Data; 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.servlet.ServletContextEvent; 10 | import javax.servlet.ServletContextListener; 11 | import javax.servlet.annotation.WebListener; 12 | import java.util.Map; 13 | 14 | /** 15 | * 容器监听器,用来看关闭容器时有哪些session存在 16 | * 17 | * @author hcy 18 | * @date 2020/12/14 19 | */ 20 | @WebListener 21 | @Component 22 | public class IocCloseListener implements ServletContextListener { 23 | 24 | private static Logger Log = LoggerFactory.getLogger(IocCloseListener.class); 25 | 26 | @Override 27 | public void contextInitialized(ServletContextEvent sce) { 28 | Log.info("[监听器注册成功..]" + IocCloseListener.class.getName()); 29 | } 30 | 31 | @Override 32 | public void contextDestroyed(ServletContextEvent sce) { 33 | Log.info("[监听到容器关闭..]" + IocCloseListener.class.getName()); 34 | // for (Map.Entry ws : WebSocket.webSocket.entrySet()) { 35 | // Log.info("[Session Info]{}", SocketInfo.build(ws.getValue()).toString()); 36 | // } 37 | } 38 | 39 | // @Data 40 | // static class SocketInfo { 41 | // private String serial; 42 | // private String user; 43 | // 44 | // public static SocketInfo build(WebSocket webSocket) { 45 | // SocketInfo info = new SocketInfo(); 46 | // info.setSerial(webSocket.currentSession()); 47 | // info.setUser(webSocket.getUser()); 48 | // return info; 49 | // } 50 | // } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/mapper/AuthorityMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.mapper; 2 | 3 | import com.xiaoju.framework.entity.dto.Authority; 4 | 5 | public interface AuthorityMapper { 6 | int deleteByPrimaryKey(Long id); 7 | 8 | int insert(Authority record); 9 | 10 | int insertSelective(Authority record); 11 | 12 | Authority selectByPrimaryKey(Long id); 13 | 14 | int updateByPrimaryKeySelective(Authority record); 15 | 16 | int updateByPrimaryKey(Authority record); 17 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/mapper/BizMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.mapper; 2 | 3 | import com.xiaoju.framework.entity.persistent.Biz; 4 | import org.springframework.stereotype.Repository; 5 | 6 | /** 7 | * 文件夹映射 8 | * 9 | * @author 刘智 10 | * @date 2020/9/9 11 | * @see Biz 12 | */ 13 | @Repository 14 | public interface BizMapper { 15 | 16 | /** 17 | * 插入文件夹 18 | * 19 | * @param biz 文件夹实体 20 | * @return bizId 21 | */ 22 | int insert(Biz biz); 23 | 24 | /** 25 | * 通过主键修改文件夹 26 | * 27 | * @param biz 文件夹实体 28 | * @return bizId 29 | */ 30 | int update(Biz biz); 31 | 32 | /** 33 | * 根据渠道和业务线获取文件夹 34 | * 35 | * @param productLineId 业务线id 36 | * @param channel 渠道 37 | * @return 文件夹实体 38 | */ 39 | Biz selectOne(Long productLineId, Integer channel); 40 | 41 | /** 42 | * 更新文件夹树内容 43 | * 44 | * @param productLineId 业务线id 45 | * @param content 文件夹内容 46 | * @param channel 渠道 47 | */ 48 | void updateContent(Long productLineId, String content, Integer channel); 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/mapper/CaseBackupMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.mapper; 2 | 3 | import com.xiaoju.framework.entity.persistent.CaseBackup; 4 | import org.apache.ibatis.annotations.Param; 5 | import org.springframework.stereotype.Repository; 6 | 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | /** 11 | * 备份映射 12 | * 13 | * @author 刘智 14 | * @date 2020/11/5 15 | * @see CaseBackup 16 | */ 17 | @Repository 18 | public interface CaseBackupMapper { 19 | 20 | /** 21 | * 获取一份用例下所有的用例备份记录 22 | * 23 | * @param caseId 用例id 24 | * @param beginTime 开始时间 25 | * @param endTime 结束时间 26 | * @return 所有备份记录 27 | */ 28 | List selectByCaseId(@Param("caseId") Long caseId, @Param("beginTime") Date beginTime, 29 | @Param("endTime") Date endTime); 30 | 31 | CaseBackup selectByBackupId(@Param("id") Long id); 32 | 33 | /** 34 | * 删除一批备份记录 35 | * 36 | * @param caseId 用例id 37 | * @return int 38 | * @see com.xiaoju.framework.service.impl.CaseBackupServiceImpl#deleteBackup(java.lang.Long) 39 | */ 40 | int updateByCaseId(Long caseId); 41 | 42 | /** 43 | * 插入备份记录 44 | * 45 | * @param caseBackup 实体 46 | * @return int 47 | */ 48 | int insert(CaseBackup caseBackup); 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/mapper/ExecRecordMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.mapper; 2 | 3 | import com.xiaoju.framework.entity.dto.RecordNumDto; 4 | import com.xiaoju.framework.entity.persistent.ExecRecord; 5 | import org.springframework.stereotype.Repository; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 任务映射 11 | * 12 | * @author 刘智 13 | * @date 2020/9/29 14 | * @see ExecRecord 15 | */ 16 | @Repository 17 | public interface ExecRecordMapper { 18 | 19 | /** 20 | * 新增记录 21 | * 22 | * @param record 操作记录实体 23 | * @return recordId 24 | */ 25 | Long insert(ExecRecord record); 26 | 27 | /** 28 | * id查询执行任务 29 | * 30 | * @param id 执行任务id 31 | * @return 执行记录实体 32 | */ 33 | ExecRecord selectOne(Long id); 34 | 35 | /** 36 | * 根据用例id获取所属的所有执行任务 37 | * 38 | * @param caseId 用例id 39 | * @return 任务列表 40 | */ 41 | List getRecordListByCaseId(Long caseId); 42 | 43 | /** 44 | * testcase的list接口需要展示每个case有多少任务 45 | * 46 | * @param caseIds 用例id列表 47 | * @return 数量统计 48 | */ 49 | List getRecordNumByCaseIds(List caseIds); 50 | 51 | /** 52 | * 脑图更新执行任务,与统计数据有关 53 | * 54 | * @param record 任务实体 55 | */ 56 | void update(ExecRecord record); 57 | 58 | /** 59 | * 编辑任务的基本属性,和统计数据无关 60 | * 61 | * @param record 任务实体 62 | * @return 任务id 63 | */ 64 | Integer edit(ExecRecord record); 65 | 66 | /** 67 | * 删除任务 68 | * 69 | * @param recordId 执行任务id 70 | */ 71 | void delete(Long recordId); 72 | 73 | /** 74 | * 批量删除执行任务 75 | * 76 | * @param recordIds 执行任务id列表 77 | */ 78 | void batchDelete(List recordIds); 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.mapper; 2 | 3 | import java.util.List; 4 | 5 | import com.xiaoju.framework.entity.dto.User; 6 | 7 | public interface UserMapper { 8 | 9 | int insert(User record); 10 | 11 | int insertSelective(User record); 12 | 13 | int deleteByPrimaryKey(Long id); 14 | 15 | int updateByPrimaryKeySelective(User record); 16 | 17 | int updateByPrimaryKey(User record); 18 | 19 | int updateUserPassWord(String username, String password); 20 | 21 | User selectByPrimaryKey(Long id); 22 | 23 | User selectByUserName(String username); 24 | 25 | List getUserList(Integer isDelete); 26 | } -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/service/CaseBackupService.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.service; 2 | 3 | import com.fasterxml.jackson.databind.JsonNode; 4 | import com.xiaoju.framework.entity.persistent.CaseBackup; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 备份接口 10 | * 11 | * @author 刘智 12 | * @date 2020/11/5 13 | */ 14 | public interface CaseBackupService { 15 | 16 | /** 17 | * 插入备份记录 18 | * 19 | * @param caseBackup 备份实体 20 | * @return 实体 21 | */ 22 | CaseBackup insertBackup(CaseBackup caseBackup); 23 | 24 | /** 25 | * 获取一段时间内,某个用例备份记录 26 | * 27 | * @param 28 | * @param caseId 用例id 29 | * @param startTime 开始时间戳 30 | * @param endTime 结束时间戳 31 | * @return 实体 32 | */ 33 | List getBackupByCaseId(Long caseId, String startTime, String endTime); 34 | 35 | /** 36 | * 删除备份记录 37 | * 38 | * @param caseId 用例id 39 | * @return int 40 | */ 41 | int deleteBackup(Long caseId); 42 | 43 | JsonNode getCaseDiff(Long backupId1, Long backupId2); 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/service/DirService.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.service; 2 | 3 | import com.xiaoju.framework.entity.dto.DirNodeDto; 4 | import com.xiaoju.framework.entity.request.dir.DirCreateReq; 5 | import com.xiaoju.framework.entity.request.dir.DirDeleteReq; 6 | import com.xiaoju.framework.entity.request.dir.DirRenameReq; 7 | import com.xiaoju.framework.entity.response.dir.DirTreeResp; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 文件夹接口 13 | * 14 | * @author 刘智 15 | * @date 2020/9/9 16 | */ 17 | public interface DirService { 18 | 19 | /** 20 | * 增加文件夹 21 | * 22 | * @param request 请求体 23 | * @return 树 24 | */ 25 | DirNodeDto addDir(DirCreateReq request); 26 | 27 | /** 28 | * 重命名文件夹 29 | * 30 | * @param request 请求体 31 | * @return 树 32 | */ 33 | DirNodeDto renameDir(DirRenameReq request); 34 | 35 | /** 36 | * 删除文件夹 37 | * 38 | * @param request 请求体 39 | * @return 树 40 | */ 41 | DirNodeDto delDir(DirDeleteReq request); 42 | 43 | /** 44 | * 获取一个节点的内容 45 | * 46 | * @param bizId 节点id 47 | * @param root 要搜索的树 48 | * @return 树 49 | */ 50 | DirNodeDto getDir(String bizId, DirNodeDto root); 51 | 52 | /** 53 | * 查询文件树 54 | * 55 | * @param productLineId 业务线id 56 | * @param channel 渠道 默认为1 57 | * @return 树 58 | */ 59 | DirNodeDto getDirTree(Long productLineId, Integer channel); 60 | 61 | /** 62 | * 查询文件树,并且给文件树装配caseIds 63 | * 64 | * @param root 通过getDirTree传入的整棵树 65 | * @return 响应体 66 | */ 67 | DirTreeResp getAllCaseDir(DirNodeDto root); 68 | 69 | /** 70 | * 获取当前节点的关联用例 71 | * 72 | * @param productLineId 业务线id 73 | * @param bizId 文件夹id 74 | * @param channel 渠道 75 | * @return case-id-list 76 | */ 77 | List getCaseIds(Long productLineId, String bizId, Integer channel); 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/service/FileService.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.service; 2 | 3 | import com.xiaoju.framework.entity.request.cases.FileImportReq; 4 | import com.xiaoju.framework.entity.response.cases.ExportXmindResp; 5 | 6 | /** 7 | * 文件上传与导出服务接口 8 | * 9 | * @author 刘智 10 | * @date 2020/10/22 11 | */ 12 | public interface FileService { 13 | 14 | /** 15 | * 导入x-mind文件生成case 16 | * 17 | * @param req 请求体 18 | * @return 生成的case-id 19 | * @throws Exception 任何可能的异常 20 | */ 21 | Long importXmindFile(FileImportReq req) throws Exception; 22 | 23 | /** 24 | * 导出xmind内容 25 | * 26 | * @param id 用例id 27 | * @param userAgent http请求头表示来源 28 | * @return 响应体 29 | * @throws Exception 任何可能的异常 30 | */ 31 | ExportXmindResp exportXmindFile(Long id, String userAgent) throws Exception; 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/service/RecordService.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.service; 2 | 3 | import com.xiaoju.framework.entity.dto.RecordWsDto; 4 | import com.xiaoju.framework.entity.persistent.ExecRecord; 5 | import com.xiaoju.framework.entity.request.record.RecordAddReq; 6 | import com.xiaoju.framework.entity.request.record.RecordUpdateReq; 7 | import com.xiaoju.framework.entity.request.ws.RecordWsClearReq; 8 | import com.xiaoju.framework.entity.response.records.RecordGeneralInfoResp; 9 | import com.xiaoju.framework.entity.response.records.RecordListResp; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * 执行任务接口 15 | * 16 | * @author 刘智 17 | * @date 2020/8/18 18 | */ 19 | public interface RecordService { 20 | 21 | /** 22 | * 根据用例集caseId,查询该用例集下所有的执行任务 23 | * 24 | * @param caseId 任务所属的用例集id 25 | * @return 执行任务列表 26 | */ 27 | List getListByCaseId(Long caseId); 28 | 29 | /** 30 | * 协同页面,获取上方基础信息 31 | * 32 | * @param recordId 操作记录id 33 | * @return 基础信息 34 | */ 35 | RecordGeneralInfoResp getGeneralInfo(Long recordId); 36 | 37 | /** 38 | * 添加执行任务 39 | * 40 | * @param req 请求体 41 | * @return 任务id 42 | */ 43 | Long addRecord(RecordAddReq req); 44 | 45 | /** 46 | * 逻辑删除执行任务 47 | * 48 | * @param recordId 任务id 49 | */ 50 | void delete(Long recordId); 51 | 52 | /** 53 | * 编辑执行任务的属性 54 | * 55 | * @param req 请求体 56 | */ 57 | void editRecord(RecordUpdateReq req); 58 | 59 | /** 60 | * 给websocket使用的获取执行任务的方法 61 | * 62 | * @param recordId 任务id 63 | * @return 转换体 64 | */ 65 | RecordWsDto getWsRecord(Long recordId); 66 | 67 | /** 68 | * 修改记录 69 | * 70 | * @param record 任务实体 71 | */ 72 | void modifyRecord(ExecRecord record); 73 | 74 | /** 75 | * 协同页面,清除执行记录 76 | * 77 | * @param req 请求体 78 | * @return 由于不知道前端到底用了什么字段,所以就直接返回entity吧 79 | */ 80 | ExecRecord wsClearRecord(RecordWsClearReq req); 81 | 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.service; 2 | 3 | import com.xiaoju.framework.entity.dto.User; 4 | import com.xiaoju.framework.entity.request.auth.UserLoginReq; 5 | import com.xiaoju.framework.entity.request.auth.UserRegisterReq; 6 | 7 | import java.util.List; 8 | 9 | import javax.servlet.http.HttpServletRequest; 10 | import javax.servlet.http.HttpServletResponse; 11 | 12 | /** 13 | * Created by 刘智 on 2021/4/22. 14 | */ 15 | public interface UserService { 16 | /** 17 | * 用户注册 18 | * 19 | * @param req 请求参数 20 | * @param request 请求体 21 | * @return 用户信息 22 | */ 23 | User register(UserRegisterReq req, HttpServletRequest request, HttpServletResponse response); 24 | 25 | /** 26 | * 用户登录 27 | * 28 | * @param req 请求参数 29 | * @param request 请求体 30 | * @return 用户信息 31 | */ 32 | User login(UserLoginReq req, HttpServletRequest request, HttpServletResponse response); 33 | 34 | /** 35 | * 修改密码 36 | * 37 | * @param isDelete 请求参数 38 | * @return Integer 39 | */ 40 | Integer updatePassWord(UserRegisterReq req, HttpServletRequest request, HttpServletResponse response); 41 | 42 | /** 43 | * 用户退出 44 | * 45 | * @param request 请求体 46 | * @return null 47 | */ 48 | Integer logout(HttpServletRequest request, HttpServletResponse response); 49 | 50 | /** 51 | * 获取用户列表 52 | * 53 | * @param isDelete 请求参数 54 | * @return 用户列表 55 | */ 56 | List getUserList(Integer isDelete); 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/util/BitBaseUtil.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.util; 2 | 3 | /** 4 | * Created by 刘智 on 2021/4/2. 5 | */ 6 | public class BitBaseUtil { 7 | public static long mergeLong(long high32, long low32) { 8 | return high32 << 32 | low32; 9 | } 10 | 11 | public static long getHigh32(long v) { 12 | return v >> 32; 13 | } 14 | 15 | public static long getLow32(long v) { 16 | return v & 0xffffffffL; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/util/CodecUtils.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.util; 2 | 3 | import org.apache.commons.codec.digest.DigestUtils; 4 | import org.apache.commons.lang3.StringUtils; 5 | 6 | import java.util.UUID; 7 | 8 | /** 9 | * Created by 刘智 on 2021/4/22. 10 | */ 11 | public class CodecUtils { 12 | public static String md5Hex(String data, String salt) { 13 | if (StringUtils.isBlank(salt)) { 14 | salt = data.hashCode() + ""; 15 | } 16 | return DigestUtils.md5Hex(salt + DigestUtils.md5Hex(data)); 17 | } 18 | 19 | public static String shaHex(String data, String salt) { 20 | if (StringUtils.isBlank(salt)) { 21 | salt = data.hashCode() + ""; 22 | } 23 | return DigestUtils.sha512Hex(salt + DigestUtils.sha512Hex(data)); 24 | } 25 | 26 | public static String generateSalt() { 27 | return StringUtils.replace(UUID.randomUUID().toString(), "-", ""); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/xiaoju/framework/util/SpringUtils.java: -------------------------------------------------------------------------------- 1 | package com.xiaoju.framework.util; 2 | 3 | import org.springframework.beans.BeansException; 4 | import org.springframework.beans.factory.config.BeanFactoryPostProcessor; 5 | import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; 6 | import org.springframework.stereotype.Repository; 7 | 8 | /** 9 | * Spring相关函数 10 | * 11 | * @author 刘智 12 | * @date 2020/9/3 13 | */ 14 | @Repository 15 | public final class SpringUtils implements BeanFactoryPostProcessor { 16 | 17 | private static ConfigurableListableBeanFactory beanFactory; 18 | 19 | @Override 20 | public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { 21 | SpringUtils.beanFactory = beanFactory; 22 | } 23 | 24 | public static ConfigurableListableBeanFactory getBeanFactory() { 25 | return beanFactory; 26 | } 27 | 28 | /** 29 | * 根据名称获取对象 30 | * 31 | * @param name bean的名称 32 | * @return Object 一个以所给名字注册的bean的实例 33 | * @throws org.springframework.beans.BeansException bean没找到的异常 34 | */ 35 | @SuppressWarnings("unchecked") 36 | public static T getBean(String name) throws BeansException { 37 | return (T) getBeanFactory().getBean(name); 38 | } 39 | 40 | /** 41 | * 根据类型获取对象 42 | * 43 | * @param clz 类型 44 | * @return 对象实体 45 | * @throws org.springframework.beans.BeansException bean没找到的异常 46 | * 47 | */ 48 | public static T getBean(Class clz) throws BeansException { 49 | return getBeanFactory().getBean(clz); 50 | } 51 | 52 | /** 53 | * 根据名称,查看工厂中是否含有此bean 54 | * 55 | * @param name bean名称 56 | * @return boolean 57 | */ 58 | public static boolean containsBean(String name) { 59 | return getBeanFactory().containsBean(name); 60 | } 61 | 62 | } -------------------------------------------------------------------------------- /src/main/resources/application-dev.properties: -------------------------------------------------------------------------------- 1 | # mysql配置 2 | spring.datasource.url=jdbc:mysql://10.22.83.65:3307/case_manager?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 3 | spring.datasource.username=root 4 | spring.datasource.password=Password123@mysql 5 | spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 6 | 7 | spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 8 | spring.datasource.druid.initial-size=5 9 | spring.datasource.druid.min-idle=5 10 | spring.datasource.druid.maxActive=20 11 | spring.datasource.druid.maxWait=60000 12 | spring.datasource.druid.timeBetweenEvictionRunsMillis=60000 13 | spring.datasource.druid.minEvictableIdleTimeMillis=300000 14 | spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL 15 | spring.datasource.druid.testWhileIdle=true 16 | spring.datasource.druid.testOnBorrow=false 17 | spring.datasource.druid.testOnReturn=false 18 | spring.datasource.druid.poolPreparedStatements=true 19 | spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20 20 | spring.datasource.druid.connectionProperties=druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 21 | 22 | logging.config=classpath:log4j2.xml 23 | 24 | spring.thymeleaf.servlet.content-type=text/html 25 | spring.thymeleaf.encoding=utf-8 26 | spring.thymeleaf.mode=LEGACYHTML5 27 | spring.thymeleaf.cache=false 28 | spring.mvc.static-path-pattern=/** 29 | # 配置本地图片文件保存目录 30 | web.upload-path=/data/H5/sit/yhttest/AgileTC/image/ 31 | spring.resources.static-locations=classpath:/web/dist/,file:${web.upload-path} 32 | spring.thymeleaf.prefix=classpath:/web/dist/ 33 | spring.thymeleaf.suffix=.html 34 | 35 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | # 默认启动环境 2 | spring.profiles.active=dev 3 | spring.application.name=case-server 4 | 5 | # HTTPs端口 6 | server.port=8443 7 | 8 | # HTTPS配置 9 | https.ssl.enable=true 10 | https.ssl.key-store=classpath:keystore.p12 11 | https.ssl.key-store-password=12345678 12 | https.ssl.keyStoreType=PKCS12 13 | https.ssl.keyAlias=tomcat 14 | 15 | http.port=8094 16 | 17 | # mybatis.xml文件位置配置 18 | mybatis.typeAliasesPackage=com.xiaoju.framework.* 19 | mybatis.mapperLocations=classpath*:mapper/*.xml 20 | 21 | # 文件上传限制,后端改为了100M 22 | spring.servlet.multipart.max-file-size=100MB 23 | spring.servlet.multipart.max-request-size=101MB 24 | 25 | spring.datasource.druid.connection-init-sqls=set names utf8mb4 26 | 27 | # log配置 28 | logging.config=classpath:log4j2.xml 29 | 30 | # 解析项目下的前端包 31 | spring.thymeleaf.servlet.content-type=text/html 32 | spring.thymeleaf.encoding=utf-8 33 | spring.thymeleaf.mode=LEGACYHTML5 34 | spring.thymeleaf.cache=false 35 | spring.mvc.static-path-pattern=/** 36 | spring.resources.static-locations=classpath:/web/dist/ 37 | spring.thymeleaf.prefix=classpath:/web/dist/ 38 | spring.thymeleaf.suffix=.html 39 | 40 | # 关闭devtools 41 | spring.devtools.add-properties=true 42 | 43 | # 权限开关,默认关闭 44 | authority.flag=false -------------------------------------------------------------------------------- /src/main/resources/web/.editorconfig: -------------------------------------------------------------------------------- 1 | # # http://editorconfig.org 2 | # root = true 3 | 4 | # [*] 5 | # indent_style = space 6 | # indent_size = 2 7 | # end_of_line = lf 8 | # charset = utf-8 9 | # trim_trailing_whitespace = true 10 | # insert_final_newline = true 11 | 12 | # [*.md] 13 | # trim_trailing_whitespace = false 14 | 15 | # [Makefile] 16 | # indent_style = tab 17 | 18 | # https://editorconfig.org 19 | root = true # 根目录的配置文件,编辑器会由当前目录向上查找,如果找到 `roor = true` 的文件,则不再查找 20 | 21 | [*] # 匹配所有的文件 22 | indent_style = space # 空格缩进 23 | indent_size = 4 # 缩进空格为4个 24 | end_of_line = lf # 文件换行符是 linux 的 `\n` 25 | charset = utf-8 # 文件编码是 utf-8 26 | trim_trailing_whitespace = true # 不保留行末的空格 27 | insert_final_newline = true # 文件末尾添加一个空行 28 | curly_bracket_next_line = false # 大括号不另起一行 29 | spaces_around_operators = true # 运算符两遍都有空格 30 | indent_brace_style = 1tbs # 条件语句格式是 1tbs 31 | 32 | [*.js] # 对所有的 js 文件生效 33 | quote_type = single # 字符串使用单引号 34 | 35 | [*.{html,less,css,json}] # 对所有 html, less, css, json 文件生效 36 | quote_type = double # 字符串使用双引号 37 | 38 | [package.json] # 对 package.json 生效 39 | indent_size = 2 # 使用2个空格缩进 40 | -------------------------------------------------------------------------------- /src/main/resources/web/.eslintignore: -------------------------------------------------------------------------------- 1 | /dist/ -------------------------------------------------------------------------------- /src/main/resources/web/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /npm-debug.log* 6 | /yarn-error.log 7 | /yarn.lock 8 | /package-lock.json 9 | 10 | 11 | # misc 12 | .DS_Store 13 | 14 | # umi 15 | /src/pages/.umi 16 | /src/pages/.umi-production 17 | /src/pages/.umi-test 18 | /.env.local 19 | -------------------------------------------------------------------------------- /src/main/resources/web/.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.md 2 | **/*.svg 3 | **/*.ejs 4 | **/*.html 5 | package.json 6 | .umi 7 | .umi-production 8 | .umi-test 9 | -------------------------------------------------------------------------------- /src/main/resources/web/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "printWidth": 80, 5 | "overrides": [ 6 | { 7 | "files": ".prettierrc", 8 | "options": { "parser": "json" } 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /src/main/resources/web/.umirc copy.js: -------------------------------------------------------------------------------- 1 | // config/config.js示例 2 | export default { 3 | base: '/web/', //部署到非根目录时才需配置 4 | targets: { //配置浏览器最低版本,比如兼容ie11 5 | ie: 11 6 | }, 7 | hash: true, //开启打包文件的hash值后缀 8 | history: 'hash', //umi默认是用的Browser History,如果要用Hash History,配置一下即可 9 | treeShaking: true, //去除那些引用的但却没有使用的代码 10 | plugins: [ 11 | [ 12 | 'umi-plugin-react', 13 | { 14 | antd: true, //启用后自动配置 babel-plugin-import,实现antd按需加载 15 | dynamicImport: { //实现路由级的动态加载 16 | webpackChunkName: true //实现有意义的异步文件名 17 | }, 18 | dva: { 19 | dynamicImport: true, //是否启用按需加载 20 | hmr: true //是否启用 dva 的 热更新 21 | }, 22 | //通过 webpack 的 dll 插件预打包一份 dll 文件来达到二次启动提速的目的 23 | dll: { 24 | exclude: [], 25 | include: ['dva', 'dva/router', 'dva/saga', 'dva/fetch', 'antd/es'] 26 | }, 27 | //约定式路由时才需引用,用于忽略指定文件夹中自动生成的路由 28 | routes: { 29 | exclude: [ 30 | /components\//, 31 | /model\.(j|t)sx?$/, 32 | /components\.(j|t)sx?$/, 33 | /service\.(j|t)sx?$/, 34 | /models\//, 35 | /services\// 36 | ], 37 | }, 38 | } 39 | ] 40 | ], 41 | //配置式路由时,路由文件由此引用(往下会讲到) 42 | routes: routes, 43 | //代理请求 44 | proxy: { 45 | "/api": { 46 | "target": "http://jsonplaceholder.typicode.com/", 47 | "changeOrigin": true, 48 | "pathRewrite": { "^/api": "" } 49 | } 50 | }, 51 | alias: { '@': resolve(__dirname, '../src'), } //别名,umirc.js为'src' 52 | }; -------------------------------------------------------------------------------- /src/main/resources/web/README.md: -------------------------------------------------------------------------------- 1 | 如果出现表格滚动样式问题,可能是antd版本问题导致,目前线上使用版本为3.23.6 -------------------------------------------------------------------------------- /src/main/resources/web/config/config.dev.js: -------------------------------------------------------------------------------- 1 | export default { 2 | define: { 3 | "process.env.apiUrl": 'http://localhost:8094', 4 | "process.env.name": '开发环境' 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/web/config/config.pro.js: -------------------------------------------------------------------------------- 1 | export default { 2 | define: { 3 | "process.env.apiUrl": 'http://yht.sunline.cn:8094', 4 | "process.env.name": '生产环境' 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/web/config/config.sit.js: -------------------------------------------------------------------------------- 1 | export default { 2 | define: { 3 | "process.env.apiUrl": 'http://yhtsit.sunline.cn:8094', 4 | "process.env.name": '测试环境' 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/web/dist/img/2.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/dist/img/2.ico -------------------------------------------------------------------------------- /src/main/resources/web/dist/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/dist/img/2.png -------------------------------------------------------------------------------- /src/main/resources/web/dist/img/3.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/dist/img/3.ico -------------------------------------------------------------------------------- /src/main/resources/web/dist/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/dist/img/3.png -------------------------------------------------------------------------------- /src/main/resources/web/dist/img/favico.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/dist/img/favico.ico -------------------------------------------------------------------------------- /src/main/resources/web/dist/img/favico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/dist/img/favico.png -------------------------------------------------------------------------------- /src/main/resources/web/dist/index.html: -------------------------------------------------------------------------------- 1 | 银户通-测试案例智能管理平台
-------------------------------------------------------------------------------- /src/main/resources/web/dist/layouts__index.28b9f196.async.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[6],{aArQ:function(e,t,n){"use strict";n.r(t);n("k/Y0");var a=n("wEI+"),l=(n("B9cy"),n("Ol7k")),o=n("q1tI"),r=n.n(o),u=n("bKel"),c=n.n(u),i=n("+Gva"),s=n("/MKj"),d=l.a.Content;t.default=c()(Object(s.c)(function(e){return{global:e.global}})(class extends o.Component{render(){var e=this.props.children,t=void 0===e?{}:e;return r.a.createElement(a.b,{locale:i.default},r.a.createElement(l.a,null,r.a.createElement(d,{style:{minHeight:"100vh"}},t)))}}))},bKel:function(e,t,n){e.exports=n("utR0").default},"k/Y0":function(e,t,n){},utR0:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n("6YkS").withRouter;t.default=a}}]); -------------------------------------------------------------------------------- /src/main/resources/web/dist/layouts__index.903d1124.chunk.css: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/resources/web/dist/p__contrast__index.207ff033.chunk.css: -------------------------------------------------------------------------------- 1 | .contras_card,.contras_card_default{margin:24px}.contras_card .contras_title,.contras_card_default .contras_title{margin-top:-24px;padding:16px 0}.contras_card .contras_title>span:first-child,.contras_card_default .contras_title>span:first-child{margin-right:20px;color:#000;font-size:14px}.contras_card_default .ant-table-thead .ant-table-selection-column .ant-table-header-column{display:none}.historyBox{padding:0 20px 20px;background:#fff}.historyBox .box_title{display:flex;justify-content:space-between;margin-bottom:5px}.historyBox .title_color .ant-card-head,.historyBox .title_history .ant-card-head{border-bottom:0}.historyBox .title_color .ant-card-head,.historyBox .title_color>.ant-card-body,.historyBox .title_history .ant-card-head,.historyBox .title_history>.ant-card-body{padding:0}.historyBox .title_color{width:300px}.historyBox .title_color span{margin-bottom:15px;padding:3px 20px;color:rgba(0,0,0,.65)} 2 | .ant-dropdown.dropStyle .ant-dropdown-menu{background-color:#37f;border-radius:0;padding:0}.ant-dropdown.dropStyle .ant-dropdown-menu-item{color:#fff;padding:0;width:auto}.ant-dropdown.dropStyle .ant-dropdown-menu-item a,.ant-dropdown.dropStyle .ant-dropdown-menu-item span{display:block;height:50px;line-height:50px;padding:0 15px;margin:0;color:#fff}.ant-dropdown.dropStyle .ant-dropdown-menu-item:hover,.ant-dropdown.dropStyle .ant-dropdown-menu-item-active{background-color:rgba(26,29,36,.5)}.user{float:right;display:flex;align-items:center;color:#fff;height:32px;padding:0 10px;background:#37f;border-radius:4px;cursor:pointer;margin-top:16px}.user .dowm,.user .userIcon{font-size:large}.user .username{white-space:nowrap;margin:0 10px}.loginCss{color:#fff;float:right} 3 | -------------------------------------------------------------------------------- /src/main/resources/web/dist/p__landing__login.aef4033c.chunk.css: -------------------------------------------------------------------------------- 1 | .login{background:#87ceeb;height:100vh;display:flex;align-items:center;justify-content:center;background:url(/static/login.032e8b38.png) no-repeat;background-size:cover;background-attachment:fixed}.login .card{background:#fff;margin-left:40%;width:500px;height:375px;border-radius:10px;box-shadow:0 6px 13px 0 rgb(0 0 0);padding:20px 50px 40px}.login .card .title{font-size:22px;font-weight:500;margin-bottom:15px}.login .card .title span{font-size:14px;margin-left:5px;font-weight:300}.login .card .btn{display:inline-block;cursor:pointer;width:200px;font-size:14px;text-align:center;padding:6px 0;border:1px solid #e3e7ed}.login .card .btn:first-of-type{border-radius:4px 0 0 4px}.login .card .btn:nth-of-type(2){border-radius:0 4px 4px 0}.login .card .btn_active{border:1px solid #40a9ff;color:#40a9ff}.login .card .input{margin-top:30px}.login .card .input input{height:36px}.login .card1{background:#fff;margin-left:40%;width:500px;height:400px;border-radius:10px;box-shadow:0 6px 13px 0 rgb(0 0 0);padding:20px 50px 40px}.login .card1 .title{font-size:22px;font-weight:500;margin-bottom:15px}.login .card1 .title span{font-size:14px;margin-left:5px;font-weight:300}.login .card1 .btn{display:inline-block;cursor:pointer;width:200px;font-size:14px;text-align:center;padding:6px 0;border:1px solid #e3e7ed}.login .card1 .btn:first-of-type{border-radius:4px 0 0 4px}.login .card1 .btn:nth-of-type(2){border-radius:0 4px 4px 0}.login .card1 .btn_active{border:1px solid #40a9ff;color:#40a9ff}.login .card1 .input{margin-top:30px}.login .card1 .input input{height:36px}.login .onBtn{width:100%;height:36px;margin-top:10px}.login .zIndex{z-index:1} 2 | -------------------------------------------------------------------------------- /src/main/resources/web/dist/static/atclogo4.ac91848f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/dist/static/atclogo4.ac91848f.png -------------------------------------------------------------------------------- /src/main/resources/web/dist/static/login.032e8b38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/dist/static/login.032e8b38.png -------------------------------------------------------------------------------- /src/main/resources/web/mock/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/mock/.gitkeep -------------------------------------------------------------------------------- /src/main/resources/web/mock/index.js: -------------------------------------------------------------------------------- 1 | export default {}; 2 | -------------------------------------------------------------------------------- /src/main/resources/web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "agiletc", 3 | "version": "1.0.0", 4 | "author": "刘智", 5 | "description": "银户通-测试案例智能管理平台", 6 | "main": "app.js", 7 | "scripts": { 8 | "start": "umi dev", 9 | "dev": "cross-env UMI_ENV=dev umi dev", 10 | "sit": "cross-env UMI_ENV=sit umi dev", 11 | "pro": "cross-env UMI_ENV=pro umi dev", 12 | "build": "umi build", 13 | "build:dev": "cross-env UMI_ENV=dev umi build", 14 | "build:sit": "cross-env UMI_ENV=sit umi build", 15 | "build:pro": "cross-env UMI_ENV=pro umi build", 16 | "lint": "eslint --ext .js src mock tests", 17 | "ui": "umi ui", 18 | "precommit": "lint-staged" 19 | }, 20 | "dependencies": { 21 | "antd": "^3.23.6", 22 | "axios": "^0.19.0", 23 | "dva": "2.6.0-beta.6", 24 | "enquire-js": "^0.2.1", 25 | "lodash.debounce": "^4.0.8", 26 | "moment": "^2.24.0", 27 | "qrcode.react": "^1.0.0", 28 | "rc-queue-anim": "^1.8.5", 29 | "rc-scroll-anim": "^2.7.4", 30 | "rc-texty": "^0.2.0", 31 | "react": "^16.8.6", 32 | "react-agiletc-editor": "^0.1.17-beta.13", 33 | "react-dom": "^16.8.6", 34 | "react-resize-panel": "^0.3.5" 35 | }, 36 | "devDependencies": { 37 | "babel-eslint": "^9.0.0", 38 | "cross-env": "^7.0.3", 39 | "eslint": "^5.4.0", 40 | "eslint-config-prettier": "^6.1.0", 41 | "eslint-config-standard": "^11.0.0", 42 | "eslint-config-umi": "^1.4.0", 43 | "eslint-plugin-flowtype": "^2.50.0", 44 | "eslint-plugin-import": "^2.14.0", 45 | "eslint-plugin-jsx-a11y": "^5.1.1", 46 | "eslint-plugin-node": "^6.0.1", 47 | "eslint-plugin-prettier": "^3.1.0", 48 | "eslint-plugin-promise": "^3.8.0", 49 | "eslint-plugin-react": "^7.14.3", 50 | "eslint-plugin-standard": "^3.1.0", 51 | "husky": "^0.14.3", 52 | "lint-staged": "^9.2.5", 53 | "node-sass": "^4.14.1", 54 | "prettier": "^1.18.2", 55 | "react-test-renderer": "^16.7.0", 56 | "sass-loader": "^7.3.1", 57 | "umi": "2.13.15", 58 | "umi-plugin-react": "^1.8.4" 59 | }, 60 | "husky": { 61 | "hooks": { 62 | "pre-commit": "lint-staged" 63 | } 64 | }, 65 | "lint-staged": { 66 | "*.{js,jsx}": [ 67 | "eslint --fix", 68 | "git add" 69 | ] 70 | }, 71 | "engines": { 72 | "node": ">=8.0.0" 73 | }, 74 | "eslintIgnore": [ 75 | "dist/" 76 | ] 77 | } -------------------------------------------------------------------------------- /src/main/resources/web/public/img/2.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/public/img/2.ico -------------------------------------------------------------------------------- /src/main/resources/web/public/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/public/img/2.png -------------------------------------------------------------------------------- /src/main/resources/web/public/img/3.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/public/img/3.ico -------------------------------------------------------------------------------- /src/main/resources/web/public/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/public/img/3.png -------------------------------------------------------------------------------- /src/main/resources/web/public/img/favico.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/public/img/favico.ico -------------------------------------------------------------------------------- /src/main/resources/web/public/img/favico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/public/img/favico.png -------------------------------------------------------------------------------- /src/main/resources/web/src/app.js: -------------------------------------------------------------------------------- 1 | // import utils from './utils'; 2 | // utils.setcookie('username', 'user'); 3 | export const dva = { 4 | config: { 5 | onError(err) { 6 | err.preventDefault() 7 | // eslint-disable-next-line 8 | console.error(err.message); 9 | }, 10 | }, 11 | } 12 | -------------------------------------------------------------------------------- /src/main/resources/web/src/components/case/caselist/img/swap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/src/components/case/caselist/img/swap.png -------------------------------------------------------------------------------- /src/main/resources/web/src/components/case/casemgt/index.scss: -------------------------------------------------------------------------------- 1 | .progress{ 2 | 3 | .border-wrap{ 4 | display: inline-block; 5 | width:100%; 6 | border-radius: 5px ; 7 | } 8 | .div-wrap{ 9 | display: inline-block; 10 | height:10px; 11 | cursor: pointer; 12 | } 13 | 14 | .div-wrap:first-child{ border-bottom-left-radius: 3px 3px; 15 | border-top-left-radius: 3px 3px;} 16 | .div-wrap:last-child{ border-bottom-right-radius: 3px 3px; 17 | border-top-right-radius: 3px 3px;} 18 | } 19 | .case-title{ 20 | font-size: 16px; 21 | color: #8B9ABE; 22 | } 23 | .description-case{ 24 | font-size: 12px; 25 | } 26 | .m-b-18{ 27 | margin-bottom: 18px; 28 | } 29 | .font-size-12{ 30 | font-size: 12px; 31 | } 32 | .elipsis-case{ 33 | 34 | 35 | overflow:hidden; white-space: nowrap; word-break:break-all;text-overflow:ellipsis; 36 | } -------------------------------------------------------------------------------- /src/main/resources/web/src/layouts/headers.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import 'antd/dist/antd.css' 3 | import { Layout, Icon, Menu, Dropdown, message } from 'antd' 4 | import getQueryString from '@/utils/getCookies' 5 | import '../pages/landing/less/index.less' 6 | import request from '@/utils/axios' 7 | const { Header } = Layout 8 | const getCookies = getQueryString.getCookie 9 | 10 | class Headers extends React.Component { 11 | componentDidMount() { 12 | if (!getCookies('username')) { 13 | window.location.href = `/login?jumpto=${window.location.href}` 14 | } 15 | } 16 | // 登出 17 | handleDropdownClick = () => { 18 | request(`/user/quit`, { 19 | method: 'POST', 20 | }).then(res => { 21 | if (res && res.code === 200) { 22 | window.location.href = `/login?jumpto=${window.location.href}` 23 | } else { 24 | message.error(res.msg) 25 | } 26 | }) 27 | } 28 | 29 | render() { 30 | const menu = ( 31 | 32 | 33 | 34 | 35 | 退出登录 36 | 37 | 38 | 39 | ) 40 | return getCookies('username') ? ( 41 |
42 | 43 | 银户通-测试案例智能管理平台 44 | 45 | {getCookies('username') ? ( 46 | 47 |
48 | 49 | {getCookies('username')} 50 | 51 |
52 |
53 | ) : ( 54 | 55 | 登录/注册 56 | 57 | )} 58 |
59 | ) : null 60 | } 61 | } 62 | export default Headers 63 | -------------------------------------------------------------------------------- /src/main/resources/web/src/layouts/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import withRouter from 'umi/withRouter' 3 | import { ConfigProvider, Layout } from 'antd' 4 | import zhCN from 'antd/es/locale/zh_CN' 5 | import { connect } from 'dva' 6 | 7 | const { Content } = Layout 8 | 9 | function mapStateToProps(state) { 10 | return { 11 | global: state.global, 12 | } 13 | } 14 | class PageLayout extends Component { 15 | render() { 16 | const { children = {} } = this.props 17 | return ( 18 | 19 | 20 | {children} 21 | 22 | 23 | ) 24 | } 25 | } 26 | export default withRouter(connect(mapStateToProps)(PageLayout)) 27 | -------------------------------------------------------------------------------- /src/main/resources/web/src/layouts/index.scss: -------------------------------------------------------------------------------- 1 | .doneHeader { 2 | background: linear-gradient(to right, #404e67 0, #6f85ad 100%); 3 | // padding: 0 0 0 240px; 4 | padding: 0; 5 | ul { 6 | background: transparent; 7 | } 8 | .user { 9 | height: 64px; 10 | text-align: right; 11 | padding: 16px 16px 16px 0; 12 | line-height: 32px; 13 | a { 14 | color: #fff; 15 | height: 32px; 16 | line-height: 32px; 17 | display: inline-block; 18 | } 19 | .ant-dropdown ul.ant-dropdown-menu { 20 | background: #fff; 21 | .ant-dropdown-menu-item > a { 22 | color: rgba(0, 0, 0, 0.65); 23 | } 24 | } 25 | @media screen and (max-width: 576px) { 26 | font-size: 0.8em; 27 | } 28 | @media screen and (max-width: 375px) { 29 | font-size: 0.6em; 30 | } 31 | } 32 | } 33 | .ant-badge { 34 | @media screen and (max-width: 576px) { 35 | font-size: 0.8em; 36 | } 37 | @media screen and (max-width: 375px) { 38 | font-size: 0.6em; 39 | } 40 | } 41 | .logo { 42 | height: 64px; 43 | padding: 16px; 44 | line-height: 32px; 45 | a { 46 | display: inline-block; 47 | height: 32px; 48 | line-height: 32px; 49 | } 50 | img { 51 | max-width: 100%; 52 | max-height: 32px; 53 | } 54 | } 55 | .doneSider { 56 | background: #2b3037; 57 | color: #fff; 58 | padding: 16px 0; 59 | } 60 | .doneSiderUl { 61 | list-style: none; 62 | padding-inline-start: 0px; 63 | margin-bottom: 0; 64 | text-align: center; 65 | li { 66 | padding: 8px; 67 | } 68 | } 69 | .doneSiderItemText { 70 | color: #fff; 71 | display: inline-block; 72 | padding: 4px 0 8px 0; 73 | } 74 | -------------------------------------------------------------------------------- /src/main/resources/web/src/models/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/src/models/.gitkeep -------------------------------------------------------------------------------- /src/main/resources/web/src/models/global.js: -------------------------------------------------------------------------------- 1 | export default { 2 | namespace: 'global', 3 | state: {}, 4 | reducers: {}, 5 | effects: {}, 6 | }; 7 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/404.js: -------------------------------------------------------------------------------- 1 | import Redirect from 'umi/redirect'; 2 | export default () => { 3 | return ; 4 | }; 5 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/contrast/index.scss: -------------------------------------------------------------------------------- 1 | .contras_card, 2 | .contras_card_default { 3 | margin: 24px; 4 | .contras_title { 5 | margin-top: -24px; 6 | padding: 16px 0; 7 | > span:first-child { 8 | margin-right: 20px; 9 | color: #000; 10 | font-size: 14px; 11 | } 12 | } 13 | } 14 | .contras_card_default { 15 | .ant-table-thead .ant-table-selection-column .ant-table-header-column { 16 | display: none; 17 | } 18 | } 19 | .historyBox { 20 | padding: 0 20px 20px; 21 | background: white; 22 | .box_title { 23 | display: flex; 24 | justify-content: space-between; 25 | margin-bottom: 5px; 26 | } 27 | .title_history, 28 | .title_color { 29 | .ant-card-head { 30 | border-bottom: 0; 31 | } 32 | .ant-card-head, 33 | > .ant-card-body { 34 | padding: 0; 35 | } 36 | } 37 | .title_color { 38 | width: 300px; 39 | span { 40 | margin-bottom: 15px; 41 | padding: 3px 20px; 42 | color: rgba(0, 0, 0, 0.65); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/document.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 银户通-测试案例智能管理平台 10 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/Banner3.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Button } from 'antd' 3 | import QueueAnim from 'rc-queue-anim' 4 | import Texty from 'rc-texty' 5 | import 'rc-texty/assets/index.css' 6 | 7 | class Banner extends React.PureComponent { 8 | render() { 9 | const { ...currentProps } = this.props 10 | const { dataSource } = currentProps 11 | delete currentProps.dataSource 12 | delete currentProps.isMobile 13 | const children = dataSource.textWrapper.children.map(item => { 14 | const { name, texty, ...$item } = item 15 | if (name.match('button')) { 16 | return ( 17 | 20 | ) 21 | } 22 | 23 | return ( 24 |
25 | {texty ? {item.children} : item.children} 26 |
27 | ) 28 | }) 29 | return ( 30 |
31 | 32 | {children} 33 | 34 |
35 | ) 36 | } 37 | } 38 | export default Banner 39 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/Footer0.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import TweenOne from 'rc-tween-one' 3 | import OverPack from 'rc-scroll-anim/lib/ScrollOverPack' 4 | 5 | class Footer extends React.PureComponent { 6 | render() { 7 | const { ...props } = this.props 8 | const { dataSource } = props 9 | delete props.dataSource 10 | delete props.isMobile 11 | return ( 12 |
13 | 14 | 19 | {dataSource.copyright.children} 20 | 21 | 22 |
23 | ) 24 | } 25 | } 26 | 27 | export default Footer 28 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/data.source.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import logoImg from './img/atclogo4.png' 3 | import getQueryString from '@/utils/getCookies' 4 | const getCookies = getQueryString.getCookie 5 | export const Banner30DataSource = { 6 | wrapper: { className: 'banner3' }, 7 | textWrapper: { 8 | className: 'banner3-text-wrapper', 9 | children: [ 10 | { 11 | name: 'slogan', 12 | className: 'banner3-slogan', 13 | children: ( 14 |
15 | 16 |
17 | 银户通 18 |
19 | ), 20 | }, 21 | { 22 | name: 'name', 23 | className: 'banner3-name', 24 | children: ( 25 | 26 |

一套敏捷的测试用例管理平台

27 |
28 | ), 29 | }, 30 | { 31 | name: 'nameEn', 32 | className: 'banner3-name-en', 33 | children: ( 34 | 35 | 以脑图方式编辑可快速上手,用例关联需求形成流程闭环,并支持组件化引用, 36 |
37 | 可在各个平台嵌入使用,是测试人员的贴心助手 38 |
39 | ), 40 | }, 41 | { 42 | name: 'button', 43 | className: 'banner3-button', 44 | children: ( 45 | 46 |

开始使用

47 |
48 | ), 49 | href: getCookies('username') ? '/case/caseList/1' : `/login?/case/caseList/1`, 50 | }, 51 | ], 52 | }, 53 | } 54 | export const Footer00DataSource = { 55 | wrapper: { className: 'home-page-wrapper footer0-wrapper' }, 56 | OverPack: { className: 'home-page footer0', playScale: 0.05 }, 57 | copyright: { 58 | className: 'copyright', 59 | children: ( 60 | 61 |

62 | Copyright © 2021 深圳市银户通科技有限公司 保留所有版权 63 |

64 |
65 | ), 66 | }, 67 | } 68 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/documentation.md: -------------------------------------------------------------------------------- 1 | # 如何使用: 2 | 3 | - umi 里如何使用[请查看](https://landing.ant.design/docs/use/umi)。 4 | - 其它脚手架使用[请查看](https://landing.ant.design/docs/use/getting-started)。 5 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/img/atclogo4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/src/pages/landing/img/atclogo4.png -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/img/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/src/pages/landing/img/login.png -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/less/antMotionStyle.less: -------------------------------------------------------------------------------- 1 | @import './common.less'; 2 | @import './custom.less'; 3 | @import './content.less'; 4 | @import './banner3.less'; 5 | @import './footer0.less'; 6 | @import './edit.less'; 7 | @import './login.less'; 8 | @import './index.less'; -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/less/common.less: -------------------------------------------------------------------------------- 1 | 2 | // @import "~antd/lib/style/v2-compatible-reset.less"; 3 | 4 | body { 5 | word-wrap: break-word; 6 | } 7 | 8 | body, 9 | div, 10 | dl, 11 | dt, 12 | dd, 13 | ul, 14 | ol, 15 | li, 16 | h1, 17 | h2, 18 | h3, 19 | h4, 20 | h5, 21 | h6 { 22 | margin: 0; 23 | padding: 0; 24 | } 25 | 26 | /* .content-wrapper > .tween-one-leaving, 27 | .queue-anim-leaving { 28 | // position: absolute !important; 29 | // width: 100%; 30 | } */ 31 | 32 | .video { 33 | max-width: 800px; 34 | } 35 | 36 | #react-content { 37 | min-height: 100%; 38 | } 39 | .home-page-wrapper p { 40 | padding: 0; 41 | margin: 0; 42 | } 43 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/less/content.less: -------------------------------------------------------------------------------- 1 | @homepage: home-page; 2 | .@{homepage}-wrapper { 3 | width: 100%; 4 | position: relative; 5 | overflow: hidden; 6 | .@{homepage} { 7 | height: 100%; 8 | max-width: 1200px; 9 | position: relative; 10 | margin: auto; 11 | will-change: transform; 12 | } 13 | .title-wrapper > h1, > h1 { 14 | font-size: 32px; 15 | color: @text-color; 16 | margin-bottom: 16px; 17 | } 18 | .title-wrapper { 19 | margin: 0 auto 64px; 20 | text-align: center; 21 | } 22 | } 23 | 24 | .@{homepage} { 25 | padding: 128px 24px; 26 | } 27 | 28 | @media screen and (max-width: 767px) { 29 | .@{homepage}-wrapper { 30 | .@{homepage} { 31 | padding: 56px 24px; 32 | >h1 { 33 | font-size: 24px; 34 | margin: 0 auto 32px; 35 | &.title-h1 { 36 | margin-bottom: 8px; 37 | } 38 | } 39 | >p { 40 | margin-bottom: 32px; 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/less/custom.less: -------------------------------------------------------------------------------- 1 | @import "~antd/lib/style/themes/default.less"; 2 | 3 | @line-color: #e9e9e9; 4 | 5 | @shadow-color: rgba(0, 0, 0, 0.15); 6 | 7 | @bottom-bar-bg-color: #262626; 8 | @bottom-bar-line-color: #000; 9 | 10 | @template-bg-color: #001529; 11 | @template-bg-color-light: #ececec; 12 | @template-nav-bg-color: #001529; 13 | @template-text-color: #ccc; 14 | @template-text-title-color: #bcbcbc; 15 | @template-text-color-light: #fff; 16 | @template-footer-text-color: #999; 17 | 18 | @animate-duration: .45s; 19 | 20 | /* 详细页图片或框框的样式; 21 | */ 22 | .page-shadow() { 23 | box-shadow: 0 5px 8px @shadow-color; 24 | } 25 | 26 | .page-pro() { 27 | border-radius: 6px; 28 | border: 1px solid @line-color; 29 | transform: translateY(0); 30 | transition: transform .3s @ease-out, box-shadow .3s @ease-out; 31 | &:hover { 32 | .page-shadow(); 33 | transform: translateY(-5px); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/less/edit.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/src/pages/landing/less/edit.less -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/less/footer0.less: -------------------------------------------------------------------------------- 1 | .footer0-wrapper { 2 | background-color: @template-bg-color; 3 | height: 80px; 4 | overflow: hidden; 5 | .footer0 { 6 | height: 100%; 7 | padding: 0 24px; 8 | line-height: 80px; 9 | text-align: center; 10 | color: @template-footer-text-color; 11 | position: relative; 12 | } 13 | } 14 | 15 | @media screen and (max-width: 767px) { 16 | .footer0-wrapper { 17 | .footer0 { 18 | font-size: 12px; 19 | &.home-page { 20 | padding: 0; 21 | } 22 | >div { 23 | width: 90%; 24 | margin: auto; 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/less/index.less: -------------------------------------------------------------------------------- 1 | :global(.ant-dropdown).dropStyle { 2 | :global(.ant-dropdown-menu) { 3 | background-color: #3377ff; 4 | border-radius: 0; 5 | padding: 0; 6 | } 7 | :global(.ant-dropdown-menu-item) { 8 | color: #fff; 9 | padding: 0; 10 | width: auto; 11 | span, 12 | a { 13 | display: block; 14 | height: 50px; 15 | line-height: 50px; 16 | padding: 0 15px; 17 | margin: 0; 18 | color: #fff; 19 | } 20 | } 21 | :global(.ant-dropdown-menu-item):hover, 22 | :global(.ant-dropdown-menu-item-active) { 23 | background-color: rgba(26, 29, 36, 0.5); 24 | } 25 | } 26 | .user { 27 | float: right; 28 | display: flex; 29 | align-items: center; 30 | color: #ffff; 31 | height: 32px; 32 | padding: 0 10px; 33 | background: #3377ff; 34 | border-radius: 4px; 35 | cursor: pointer; 36 | margin-top: 16px; 37 | .userIcon, .dowm { 38 | font-size: large; 39 | } 40 | .username { 41 | white-space: nowrap; 42 | margin: 0 10px; 43 | } 44 | } 45 | .loginCss { 46 | color: #fff; 47 | float: right; 48 | } 49 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/landing/utils.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Button } from 'antd' 3 | 4 | export const isImg = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/ 5 | export const getChildrenToRender = (item, i) => { 6 | let tag = item.name.indexOf('title') === 0 ? 'h1' : 'div' 7 | tag = item.href ? 'a' : tag 8 | let children = 9 | typeof item.children === 'string' && item.children.match(isImg) 10 | ? React.createElement('img', { src: item.children, alt: 'img' }) 11 | : item.children 12 | if (item.name.indexOf('button') === 0 && typeof item.children === 'object') { 13 | children = React.createElement(Button, { 14 | ...item.children, 15 | }) 16 | } 17 | return React.createElement(tag, { key: i.toString(), ...item }, children) 18 | } 19 | -------------------------------------------------------------------------------- /src/main/resources/web/src/pages/testTask/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Casemgt from '../../components/case/casemgt' 3 | import 'antd/dist/antd.css' 4 | import getQueryString from '@/utils/getCookies' 5 | const getCookies = getQueryString.getCookie 6 | 7 | class casePage extends React.Component { 8 | componentDidMount() { 9 | if (!getCookies('username')) { 10 | window.location.href = `/login?jumpto=${window.location.href}` 11 | } 12 | } 13 | render() { 14 | return getCookies('username') ? ( 15 |
16 | 26 |
27 | ) : null 28 | } 29 | } 30 | export default casePage 31 | -------------------------------------------------------------------------------- /src/main/resources/web/src/services/global.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/resources/web/src/services/global.js -------------------------------------------------------------------------------- /src/main/resources/web/src/utils/getCookies.js: -------------------------------------------------------------------------------- 1 | exports.getCookie = function(name) { 2 | function getCookieVal(offset) { 3 | let endstr = document.cookie.indexOf(';', offset); 4 | if (endstr === -1) { 5 | endstr = document.cookie.length; 6 | } 7 | return decodeURI(document.cookie.substring(offset, endstr)); 8 | } 9 | let arg = name + '='; 10 | let alen = arg.length; 11 | let clen = document.cookie.length; 12 | let i = 0; 13 | let j = 0; 14 | while (i < clen) { 15 | j = i + alen; 16 | if (document.cookie.substring(i, j) === arg) return getCookieVal(j); 17 | i = document.cookie.indexOf(' ', i) + 1; 18 | if (i === 0) break; 19 | } 20 | return null; 21 | }; -------------------------------------------------------------------------------- /src/main/resources/web/src/utils/index.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | getQueryString(name) { 4 | let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); 5 | let r = window.location.search.substr(1).match(reg); 6 | if (r != null) return unescape(r[2]); 7 | return null; 8 | }, 9 | setcookie(name, value) { 10 | let Days = 30; 11 | let exp = new Date(); 12 | exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); 13 | document.cookie = 14 | name + '=' + escape(value) + ';expires=' + exp.toGMTString(); 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /src/main/resources/web/src/utils/link.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Link from 'umi/link'; 3 | import config from '@/page/index/config'; 4 | 5 | export default class Button extends React.Component { 6 | render() { 7 | let linkTo = config.RouterPrefix + this.props.to; 8 | 9 | return ( 10 | 11 | {this.props.children} 12 | 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/resources/web/src/utils/requirementUtils.js: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | export function getRequirmentAllInfos(projectLs, requirementLs, requirementId) { 4 | let initProject = { id: 0, name: '零散需求' }; 5 | if (requirementLs.length === 0) { 6 | return; 7 | } 8 | let options = { projectLs: [], requirementLs: [] }; 9 | let requirement = _.find(requirementLs, temp => { 10 | return temp.id === requirementId; 11 | }); 12 | let project = null; 13 | if (requirement) { 14 | project = _.find(projectLs, temp => { 15 | return temp.id === requirement.iterationId; 16 | }); 17 | } 18 | project = project || initProject; 19 | options.projectLs.push(project); 20 | options.requirementLs = requirementLs.filter(item => item.iterationId === project.id); 21 | return { 22 | project: project, 23 | requirement: requirement, 24 | options: options 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/web/webpack.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 不是真实的 webpack 配置,仅为兼容 webstorm 和 intellij idea 代码跳转 3 | * ref: https://github.com/umijs/umi/issues/1109#issuecomment-423380125 4 | */ 5 | 6 | module.exports = { 7 | resolve: { 8 | alias: { 9 | '@': require('path').resolve(__dirname, 'src') 10 | } 11 | }, 12 | configureWebpack: { 13 | devtool: 'source-map' 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/逻辑.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/src/main/逻辑.png -------------------------------------------------------------------------------- /target/classes/application-dev.properties: -------------------------------------------------------------------------------- 1 | # mysql配置 2 | spring.datasource.url=jdbc:mysql://10.22.83.65:3307/case_manager?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 3 | spring.datasource.username=root 4 | spring.datasource.password=Password123@mysql 5 | spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 6 | 7 | spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 8 | spring.datasource.druid.initial-size=5 9 | spring.datasource.druid.min-idle=5 10 | spring.datasource.druid.maxActive=20 11 | spring.datasource.druid.maxWait=60000 12 | spring.datasource.druid.timeBetweenEvictionRunsMillis=60000 13 | spring.datasource.druid.minEvictableIdleTimeMillis=300000 14 | spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL 15 | spring.datasource.druid.testWhileIdle=true 16 | spring.datasource.druid.testOnBorrow=false 17 | spring.datasource.druid.testOnReturn=false 18 | spring.datasource.druid.poolPreparedStatements=true 19 | spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20 20 | spring.datasource.druid.connectionProperties=druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 21 | 22 | logging.config=classpath:log4j2.xml 23 | 24 | spring.thymeleaf.servlet.content-type=text/html 25 | spring.thymeleaf.encoding=utf-8 26 | spring.thymeleaf.mode=LEGACYHTML5 27 | spring.thymeleaf.cache=false 28 | spring.mvc.static-path-pattern=/** 29 | # 配置本地图片文件保存目录 30 | web.upload-path=/data/H5/sit/yhttest/AgileTC/image/ 31 | spring.resources.static-locations=classpath:/web/dist/,file:${web.upload-path} 32 | spring.thymeleaf.prefix=classpath:/web/dist/ 33 | spring.thymeleaf.suffix=.html 34 | 35 | -------------------------------------------------------------------------------- /target/classes/application.properties: -------------------------------------------------------------------------------- 1 | # 默认启动环境 2 | spring.profiles.active=dev 3 | spring.application.name=case-server 4 | 5 | # HTTPs端口 6 | server.port=8443 7 | 8 | # HTTPS配置 9 | https.ssl.enable=true 10 | https.ssl.key-store=classpath:keystore.p12 11 | https.ssl.key-store-password=12345678 12 | https.ssl.keyStoreType=PKCS12 13 | https.ssl.keyAlias=tomcat 14 | 15 | http.port=8094 16 | 17 | # mybatis.xml文件位置配置 18 | mybatis.typeAliasesPackage=com.xiaoju.framework.* 19 | mybatis.mapperLocations=classpath*:mapper/*.xml 20 | 21 | # 文件上传限制,后端改为了100M 22 | spring.servlet.multipart.max-file-size=100MB 23 | spring.servlet.multipart.max-request-size=101MB 24 | 25 | spring.datasource.druid.connection-init-sqls=set names utf8mb4 26 | 27 | # log配置 28 | logging.config=classpath:log4j2.xml 29 | 30 | # 解析项目下的前端包 31 | spring.thymeleaf.servlet.content-type=text/html 32 | spring.thymeleaf.encoding=utf-8 33 | spring.thymeleaf.mode=LEGACYHTML5 34 | spring.thymeleaf.cache=false 35 | spring.mvc.static-path-pattern=/** 36 | spring.resources.static-locations=classpath:/web/dist/ 37 | spring.thymeleaf.prefix=classpath:/web/dist/ 38 | spring.thymeleaf.suffix=.html 39 | 40 | # 关闭devtools 41 | spring.devtools.add-properties=true 42 | 43 | # 权限开关,默认关闭 44 | authority.flag=false -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/CaseServerApplication.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/CaseServerApplication.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/config/ApplicationConfig$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/config/ApplicationConfig$1.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/config/ApplicationConfig.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/config/ApplicationConfig.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/constants/BizConstant.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/constants/BizConstant.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/constants/SystemConstant.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/constants/SystemConstant.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/constants/XmindConstant.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/constants/XmindConstant.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/constants/enums/EnvEnum.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/constants/enums/EnvEnum.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/constants/enums/PriorityEnum.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/constants/enums/PriorityEnum.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/constants/enums/ProgressEnum.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/constants/enums/ProgressEnum.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/constants/enums/StatusCode.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/constants/enums/StatusCode.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/controller/BackupController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/controller/BackupController.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/controller/CaseController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/controller/CaseController.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/controller/DirController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/controller/DirController.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/controller/RecordController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/controller/RecordController.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/controller/UploadController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/controller/UploadController.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/controller/UserController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/controller/UserController.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/controller/WebController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/controller/WebController.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/dto/Authority.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/dto/Authority.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/dto/DirNodeDto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/dto/DirNodeDto.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/dto/MergeCaseDto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/dto/MergeCaseDto.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/dto/PickCaseDto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/dto/PickCaseDto.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/dto/RecordNumDto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/dto/RecordNumDto.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/dto/RecordWsDto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/dto/RecordWsDto.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/dto/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/dto/User.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/exception/CaseServerException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/exception/CaseServerException.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/exception/ExpHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/exception/ExpHandler.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/persistent/Biz.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/persistent/Biz.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/persistent/CaseBackup.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/persistent/CaseBackup.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/persistent/ExecRecord.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/persistent/ExecRecord.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/persistent/TestCase.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/persistent/TestCase.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/ParamValidate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/ParamValidate.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/auth/UserLoginReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/auth/UserLoginReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/auth/UserRegisterReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/auth/UserRegisterReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/cases/CaseConditionReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/cases/CaseConditionReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/cases/CaseCreateReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/cases/CaseCreateReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/cases/CaseDeleteReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/cases/CaseDeleteReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/cases/CaseEditReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/cases/CaseEditReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/cases/CaseQueryReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/cases/CaseQueryReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/cases/FileImportReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/cases/FileImportReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/dir/DirCreateReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/dir/DirCreateReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/dir/DirDeleteReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/dir/DirDeleteReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/dir/DirRenameReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/dir/DirRenameReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/record/RecordAddReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/record/RecordAddReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/record/RecordDeleteReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/record/RecordDeleteReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/record/RecordQueryReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/record/RecordQueryReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/record/RecordUpdateReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/record/RecordUpdateReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/ws/RecordWsClearReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/ws/RecordWsClearReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/request/ws/WsSaveReq.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/request/ws/WsSaveReq.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/PersonResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/PersonResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/cases/CaseConditionResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/cases/CaseConditionResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/cases/CaseDetailResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/cases/CaseDetailResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/cases/CaseGeneralInfoResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/cases/CaseGeneralInfoResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/cases/CaseListResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/cases/CaseListResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/cases/ExportXmindResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/cases/ExportXmindResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/controller/PageModule.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/controller/PageModule.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/controller/Response.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/controller/Response.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/controller/Status.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/controller/Status.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/dir/BizListResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/dir/BizListResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/dir/BizNodeResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/dir/BizNodeResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/dir/DirTreeResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/dir/DirTreeResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/records/RecordGeneralInfoResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/records/RecordGeneralInfoResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/response/records/RecordListResp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/response/records/RecordListResp.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/xmind/CaseContent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/xmind/CaseContent.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/xmind/CaseCount.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/xmind/CaseCount.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/xmind/DataObj.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/xmind/DataObj.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/xmind/IntCount.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/xmind/IntCount.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/entity/xmind/RootData.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/entity/xmind/RootData.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/filter/WebSocketFilter$WsAuthFilter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/filter/WebSocketFilter$WsAuthFilter.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/filter/WebSocketFilter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/filter/WebSocketFilter.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/CaseMessageType.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/CaseMessageType.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/CaseRoom.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/CaseRoom.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/CaseWsMessages.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/CaseWsMessages.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/Client$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/Client$1.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/Client.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/RecordRoom.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/RecordRoom.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/Room$1$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/Room$1$1.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/Room$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/Room$1.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/Room$Player.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/Room$Player.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/Room.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/Room.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/WebSocket$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/WebSocket$1.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/WebSocket$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/WebSocket$2.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/WebSocket$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/WebSocket$3.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/handler/WebSocket.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/handler/WebSocket.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/listener/IocCloseListener.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/listener/IocCloseListener.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/mapper/AuthorityMapper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/mapper/AuthorityMapper.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/mapper/BizMapper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/mapper/BizMapper.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/mapper/CaseBackupMapper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/mapper/CaseBackupMapper.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/mapper/ExecRecordMapper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/mapper/ExecRecordMapper.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/mapper/TestCaseMapper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/mapper/TestCaseMapper.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/mapper/UserMapper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/mapper/UserMapper.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/CaseBackupService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/CaseBackupService.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/CaseService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/CaseService.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/DirService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/DirService.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/FileService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/FileService.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/RecordService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/RecordService.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/UserService.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/impl/CaseBackupServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/impl/CaseBackupServiceImpl.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/impl/CaseServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/impl/CaseServiceImpl.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/impl/DirServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/impl/DirServiceImpl.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/impl/FileServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/impl/FileServiceImpl.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/impl/RecordServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/impl/RecordServiceImpl.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/service/impl/UserServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/service/impl/UserServiceImpl.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/util/BitBaseUtil.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/util/BitBaseUtil.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/util/CodecUtils.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/util/CodecUtils.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/util/CookieUtils.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/util/CookieUtils.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/util/FileUtil.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/util/FileUtil.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/util/SpringUtils.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/util/SpringUtils.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/util/StringUtil.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/util/StringUtil.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/util/TimeUtil.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/util/TimeUtil.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/util/TreeUtil$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/util/TreeUtil$1.class -------------------------------------------------------------------------------- /target/classes/com/xiaoju/framework/util/TreeUtil.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/com/xiaoju/framework/util/TreeUtil.class -------------------------------------------------------------------------------- /target/classes/web/.editorconfig: -------------------------------------------------------------------------------- 1 | # # http://editorconfig.org 2 | # root = true 3 | 4 | # [*] 5 | # indent_style = space 6 | # indent_size = 2 7 | # end_of_line = lf 8 | # charset = utf-8 9 | # trim_trailing_whitespace = true 10 | # insert_final_newline = true 11 | 12 | # [*.md] 13 | # trim_trailing_whitespace = false 14 | 15 | # [Makefile] 16 | # indent_style = tab 17 | 18 | # https://editorconfig.org 19 | root = true # 根目录的配置文件,编辑器会由当前目录向上查找,如果找到 `roor = true` 的文件,则不再查找 20 | 21 | [*] # 匹配所有的文件 22 | indent_style = space # 空格缩进 23 | indent_size = 4 # 缩进空格为4个 24 | end_of_line = lf # 文件换行符是 linux 的 `\n` 25 | charset = utf-8 # 文件编码是 utf-8 26 | trim_trailing_whitespace = true # 不保留行末的空格 27 | insert_final_newline = true # 文件末尾添加一个空行 28 | curly_bracket_next_line = false # 大括号不另起一行 29 | spaces_around_operators = true # 运算符两遍都有空格 30 | indent_brace_style = 1tbs # 条件语句格式是 1tbs 31 | 32 | [*.js] # 对所有的 js 文件生效 33 | quote_type = single # 字符串使用单引号 34 | 35 | [*.{html,less,css,json}] # 对所有 html, less, css, json 文件生效 36 | quote_type = double # 字符串使用双引号 37 | 38 | [package.json] # 对 package.json 生效 39 | indent_size = 2 # 使用2个空格缩进 40 | -------------------------------------------------------------------------------- /target/classes/web/.eslintignore: -------------------------------------------------------------------------------- 1 | /dist/ -------------------------------------------------------------------------------- /target/classes/web/.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.md 2 | **/*.svg 3 | **/*.ejs 4 | **/*.html 5 | package.json 6 | .umi 7 | .umi-production 8 | .umi-test 9 | -------------------------------------------------------------------------------- /target/classes/web/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "printWidth": 80, 5 | "overrides": [ 6 | { 7 | "files": ".prettierrc", 8 | "options": { "parser": "json" } 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /target/classes/web/.umirc copy.js: -------------------------------------------------------------------------------- 1 | // config/config.js示例 2 | export default { 3 | base: '/web/', //部署到非根目录时才需配置 4 | targets: { //配置浏览器最低版本,比如兼容ie11 5 | ie: 11 6 | }, 7 | hash: true, //开启打包文件的hash值后缀 8 | history: 'hash', //umi默认是用的Browser History,如果要用Hash History,配置一下即可 9 | treeShaking: true, //去除那些引用的但却没有使用的代码 10 | plugins: [ 11 | [ 12 | 'umi-plugin-react', 13 | { 14 | antd: true, //启用后自动配置 babel-plugin-import,实现antd按需加载 15 | dynamicImport: { //实现路由级的动态加载 16 | webpackChunkName: true //实现有意义的异步文件名 17 | }, 18 | dva: { 19 | dynamicImport: true, //是否启用按需加载 20 | hmr: true //是否启用 dva 的 热更新 21 | }, 22 | //通过 webpack 的 dll 插件预打包一份 dll 文件来达到二次启动提速的目的 23 | dll: { 24 | exclude: [], 25 | include: ['dva', 'dva/router', 'dva/saga', 'dva/fetch', 'antd/es'] 26 | }, 27 | //约定式路由时才需引用,用于忽略指定文件夹中自动生成的路由 28 | routes: { 29 | exclude: [ 30 | /components\//, 31 | /model\.(j|t)sx?$/, 32 | /components\.(j|t)sx?$/, 33 | /service\.(j|t)sx?$/, 34 | /models\//, 35 | /services\// 36 | ], 37 | }, 38 | } 39 | ] 40 | ], 41 | //配置式路由时,路由文件由此引用(往下会讲到) 42 | routes: routes, 43 | //代理请求 44 | proxy: { 45 | "/api": { 46 | "target": "http://jsonplaceholder.typicode.com/", 47 | "changeOrigin": true, 48 | "pathRewrite": { "^/api": "" } 49 | } 50 | }, 51 | alias: { '@': resolve(__dirname, '../src'), } //别名,umirc.js为'src' 52 | }; -------------------------------------------------------------------------------- /target/classes/web/README.md: -------------------------------------------------------------------------------- 1 | 如果出现表格滚动样式问题,可能是antd版本问题导致,目前线上使用版本为3.23.6 -------------------------------------------------------------------------------- /target/classes/web/config/config.dev.js: -------------------------------------------------------------------------------- 1 | export default { 2 | define: { 3 | "process.env.apiUrl": 'http://localhost:8094', 4 | "process.env.name": '开发环境' 5 | } 6 | } -------------------------------------------------------------------------------- /target/classes/web/config/config.pro.js: -------------------------------------------------------------------------------- 1 | export default { 2 | define: { 3 | "process.env.apiUrl": 'http://yht.sunline.cn:8094', 4 | "process.env.name": '生产环境' 5 | } 6 | } -------------------------------------------------------------------------------- /target/classes/web/config/config.sit.js: -------------------------------------------------------------------------------- 1 | export default { 2 | define: { 3 | "process.env.apiUrl": 'http://yhtsit.sunline.cn:8094', 4 | "process.env.name": '测试环境' 5 | } 6 | } -------------------------------------------------------------------------------- /target/classes/web/dist/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/dist/img/2.png -------------------------------------------------------------------------------- /target/classes/web/dist/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/dist/img/3.png -------------------------------------------------------------------------------- /target/classes/web/dist/img/favico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/dist/img/favico.png -------------------------------------------------------------------------------- /target/classes/web/dist/index.html: -------------------------------------------------------------------------------- 1 | 银户通-测试案例智能管理平台
-------------------------------------------------------------------------------- /target/classes/web/dist/layouts__index.28b9f196.async.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[6],{aArQ:function(e,t,n){"use strict";n.r(t);n("k/Y0");var a=n("wEI+"),l=(n("B9cy"),n("Ol7k")),o=n("q1tI"),r=n.n(o),u=n("bKel"),c=n.n(u),i=n("+Gva"),s=n("/MKj"),d=l.a.Content;t.default=c()(Object(s.c)(function(e){return{global:e.global}})(class extends o.Component{render(){var e=this.props.children,t=void 0===e?{}:e;return r.a.createElement(a.b,{locale:i.default},r.a.createElement(l.a,null,r.a.createElement(d,{style:{minHeight:"100vh"}},t)))}}))},bKel:function(e,t,n){e.exports=n("utR0").default},"k/Y0":function(e,t,n){},utR0:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n("6YkS").withRouter;t.default=a}}]); -------------------------------------------------------------------------------- /target/classes/web/dist/layouts__index.903d1124.chunk.css: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /target/classes/web/dist/p__contrast__index.207ff033.chunk.css: -------------------------------------------------------------------------------- 1 | .contras_card,.contras_card_default{margin:24px}.contras_card .contras_title,.contras_card_default .contras_title{margin-top:-24px;padding:16px 0}.contras_card .contras_title>span:first-child,.contras_card_default .contras_title>span:first-child{margin-right:20px;color:#000;font-size:14px}.contras_card_default .ant-table-thead .ant-table-selection-column .ant-table-header-column{display:none}.historyBox{padding:0 20px 20px;background:#fff}.historyBox .box_title{display:flex;justify-content:space-between;margin-bottom:5px}.historyBox .title_color .ant-card-head,.historyBox .title_history .ant-card-head{border-bottom:0}.historyBox .title_color .ant-card-head,.historyBox .title_color>.ant-card-body,.historyBox .title_history .ant-card-head,.historyBox .title_history>.ant-card-body{padding:0}.historyBox .title_color{width:300px}.historyBox .title_color span{margin-bottom:15px;padding:3px 20px;color:rgba(0,0,0,.65)} 2 | .ant-dropdown.dropStyle .ant-dropdown-menu{background-color:#37f;border-radius:0;padding:0}.ant-dropdown.dropStyle .ant-dropdown-menu-item{color:#fff;padding:0;width:auto}.ant-dropdown.dropStyle .ant-dropdown-menu-item a,.ant-dropdown.dropStyle .ant-dropdown-menu-item span{display:block;height:50px;line-height:50px;padding:0 15px;margin:0;color:#fff}.ant-dropdown.dropStyle .ant-dropdown-menu-item:hover,.ant-dropdown.dropStyle .ant-dropdown-menu-item-active{background-color:rgba(26,29,36,.5)}.user{float:right;display:flex;align-items:center;color:#fff;height:32px;padding:0 10px;background:#37f;border-radius:4px;cursor:pointer;margin-top:16px}.user .dowm,.user .userIcon{font-size:large}.user .username{white-space:nowrap;margin:0 10px}.loginCss{color:#fff;float:right} 3 | -------------------------------------------------------------------------------- /target/classes/web/dist/p__landing__login.aef4033c.chunk.css: -------------------------------------------------------------------------------- 1 | .login{background:#87ceeb;height:100vh;display:flex;align-items:center;justify-content:center;background:url(/static/login.032e8b38.png) no-repeat;background-size:cover;background-attachment:fixed}.login .card{background:#fff;margin-left:40%;width:500px;height:375px;border-radius:10px;box-shadow:0 6px 13px 0 rgb(0 0 0);padding:20px 50px 40px}.login .card .title{font-size:22px;font-weight:500;margin-bottom:15px}.login .card .title span{font-size:14px;margin-left:5px;font-weight:300}.login .card .btn{display:inline-block;cursor:pointer;width:200px;font-size:14px;text-align:center;padding:6px 0;border:1px solid #e3e7ed}.login .card .btn:first-of-type{border-radius:4px 0 0 4px}.login .card .btn:nth-of-type(2){border-radius:0 4px 4px 0}.login .card .btn_active{border:1px solid #40a9ff;color:#40a9ff}.login .card .input{margin-top:30px}.login .card .input input{height:36px}.login .card1{background:#fff;margin-left:40%;width:500px;height:400px;border-radius:10px;box-shadow:0 6px 13px 0 rgb(0 0 0);padding:20px 50px 40px}.login .card1 .title{font-size:22px;font-weight:500;margin-bottom:15px}.login .card1 .title span{font-size:14px;margin-left:5px;font-weight:300}.login .card1 .btn{display:inline-block;cursor:pointer;width:200px;font-size:14px;text-align:center;padding:6px 0;border:1px solid #e3e7ed}.login .card1 .btn:first-of-type{border-radius:4px 0 0 4px}.login .card1 .btn:nth-of-type(2){border-radius:0 4px 4px 0}.login .card1 .btn_active{border:1px solid #40a9ff;color:#40a9ff}.login .card1 .input{margin-top:30px}.login .card1 .input input{height:36px}.login .onBtn{width:100%;height:36px;margin-top:10px}.login .zIndex{z-index:1} 2 | -------------------------------------------------------------------------------- /target/classes/web/dist/static/atclogo4.ac91848f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/dist/static/atclogo4.ac91848f.png -------------------------------------------------------------------------------- /target/classes/web/dist/static/login.032e8b38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/dist/static/login.032e8b38.png -------------------------------------------------------------------------------- /target/classes/web/mock/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/mock/.gitkeep -------------------------------------------------------------------------------- /target/classes/web/mock/index.js: -------------------------------------------------------------------------------- 1 | export default {}; 2 | -------------------------------------------------------------------------------- /target/classes/web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "agiletc", 3 | "version": "1.0.0", 4 | "author": "刘智", 5 | "description": "银户通-测试案例智能管理平台", 6 | "main": "app.js", 7 | "scripts": { 8 | "start": "umi dev", 9 | "dev": "cross-env UMI_ENV=dev umi dev", 10 | "sit": "cross-env UMI_ENV=sit umi dev", 11 | "pro": "cross-env UMI_ENV=pro umi dev", 12 | "build": "umi build", 13 | "build:dev": "cross-env UMI_ENV=dev umi build", 14 | "build:sit": "cross-env UMI_ENV=sit umi build", 15 | "build:pro": "cross-env UMI_ENV=pro umi build", 16 | "lint": "eslint --ext .js src mock tests", 17 | "ui": "umi ui", 18 | "precommit": "lint-staged" 19 | }, 20 | "dependencies": { 21 | "antd": "^3.23.6", 22 | "axios": "^0.19.0", 23 | "dva": "2.6.0-beta.6", 24 | "enquire-js": "^0.2.1", 25 | "lodash.debounce": "^4.0.8", 26 | "moment": "^2.24.0", 27 | "qrcode.react": "^1.0.0", 28 | "rc-queue-anim": "^1.8.5", 29 | "rc-scroll-anim": "^2.7.4", 30 | "rc-texty": "^0.2.0", 31 | "react": "^16.8.6", 32 | "react-agiletc-editor": "^0.1.17-beta.13", 33 | "react-dom": "^16.8.6", 34 | "react-resize-panel": "^0.3.5" 35 | }, 36 | "devDependencies": { 37 | "babel-eslint": "^9.0.0", 38 | "cross-env": "^7.0.3", 39 | "eslint": "^5.4.0", 40 | "eslint-config-prettier": "^6.1.0", 41 | "eslint-config-standard": "^11.0.0", 42 | "eslint-config-umi": "^1.4.0", 43 | "eslint-plugin-flowtype": "^2.50.0", 44 | "eslint-plugin-import": "^2.14.0", 45 | "eslint-plugin-jsx-a11y": "^5.1.1", 46 | "eslint-plugin-node": "^6.0.1", 47 | "eslint-plugin-prettier": "^3.1.0", 48 | "eslint-plugin-promise": "^3.8.0", 49 | "eslint-plugin-react": "^7.14.3", 50 | "eslint-plugin-standard": "^3.1.0", 51 | "husky": "^0.14.3", 52 | "lint-staged": "^9.2.5", 53 | "node-sass": "^4.14.1", 54 | "prettier": "^1.18.2", 55 | "react-test-renderer": "^16.7.0", 56 | "sass-loader": "^7.3.1", 57 | "umi": "2.13.15", 58 | "umi-plugin-react": "^1.8.4" 59 | }, 60 | "husky": { 61 | "hooks": { 62 | "pre-commit": "lint-staged" 63 | } 64 | }, 65 | "lint-staged": { 66 | "*.{js,jsx}": [ 67 | "eslint --fix", 68 | "git add" 69 | ] 70 | }, 71 | "engines": { 72 | "node": ">=8.0.0" 73 | }, 74 | "eslintIgnore": [ 75 | "dist/" 76 | ] 77 | } -------------------------------------------------------------------------------- /target/classes/web/public/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/public/img/2.png -------------------------------------------------------------------------------- /target/classes/web/public/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/public/img/3.png -------------------------------------------------------------------------------- /target/classes/web/public/img/favico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/public/img/favico.png -------------------------------------------------------------------------------- /target/classes/web/src/app.js: -------------------------------------------------------------------------------- 1 | // import utils from './utils'; 2 | // utils.setcookie('username', 'user'); 3 | export const dva = { 4 | config: { 5 | onError(err) { 6 | err.preventDefault() 7 | // eslint-disable-next-line 8 | console.error(err.message); 9 | }, 10 | }, 11 | } 12 | -------------------------------------------------------------------------------- /target/classes/web/src/components/case/caselist/img/swap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/src/components/case/caselist/img/swap.png -------------------------------------------------------------------------------- /target/classes/web/src/components/case/casemgt/index.scss: -------------------------------------------------------------------------------- 1 | .progress{ 2 | 3 | .border-wrap{ 4 | display: inline-block; 5 | width:100%; 6 | border-radius: 5px ; 7 | } 8 | .div-wrap{ 9 | display: inline-block; 10 | height:10px; 11 | cursor: pointer; 12 | } 13 | 14 | .div-wrap:first-child{ border-bottom-left-radius: 3px 3px; 15 | border-top-left-radius: 3px 3px;} 16 | .div-wrap:last-child{ border-bottom-right-radius: 3px 3px; 17 | border-top-right-radius: 3px 3px;} 18 | } 19 | .case-title{ 20 | font-size: 16px; 21 | color: #8B9ABE; 22 | } 23 | .description-case{ 24 | font-size: 12px; 25 | } 26 | .m-b-18{ 27 | margin-bottom: 18px; 28 | } 29 | .font-size-12{ 30 | font-size: 12px; 31 | } 32 | .elipsis-case{ 33 | 34 | 35 | overflow:hidden; white-space: nowrap; word-break:break-all;text-overflow:ellipsis; 36 | } -------------------------------------------------------------------------------- /target/classes/web/src/layouts/headers.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import 'antd/dist/antd.css' 3 | import { Layout, Icon, Menu, Dropdown, message } from 'antd' 4 | import getQueryString from '@/utils/getCookies' 5 | import '../pages/landing/less/index.less' 6 | import request from '@/utils/axios' 7 | const { Header } = Layout 8 | const getCookies = getQueryString.getCookie 9 | 10 | class Headers extends React.Component { 11 | componentDidMount() { 12 | if (!getCookies('username')) { 13 | window.location.href = `/login?jumpto=${window.location.href}` 14 | } 15 | } 16 | // 登出 17 | handleDropdownClick = () => { 18 | request(`/user/quit`, { 19 | method: 'POST', 20 | }).then(res => { 21 | if (res && res.code === 200) { 22 | window.location.href = `/login?jumpto=${window.location.href}` 23 | } else { 24 | message.error(res.msg) 25 | } 26 | }) 27 | } 28 | 29 | render() { 30 | const menu = ( 31 | 32 | 33 | 34 | 35 | 退出登录 36 | 37 | 38 | 39 | ) 40 | return getCookies('username') ? ( 41 |
42 | 43 | 银户通-测试案例智能管理平台 44 | 45 | {getCookies('username') ? ( 46 | 47 |
48 | 49 | {getCookies('username')} 50 | 51 |
52 |
53 | ) : ( 54 | 55 | 登录/注册 56 | 57 | )} 58 |
59 | ) : null 60 | } 61 | } 62 | export default Headers 63 | -------------------------------------------------------------------------------- /target/classes/web/src/layouts/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import withRouter from 'umi/withRouter' 3 | import { ConfigProvider, Layout } from 'antd' 4 | import zhCN from 'antd/es/locale/zh_CN' 5 | import { connect } from 'dva' 6 | 7 | const { Content } = Layout 8 | 9 | function mapStateToProps(state) { 10 | return { 11 | global: state.global, 12 | } 13 | } 14 | class PageLayout extends Component { 15 | render() { 16 | const { children = {} } = this.props 17 | return ( 18 | 19 | 20 | {children} 21 | 22 | 23 | ) 24 | } 25 | } 26 | export default withRouter(connect(mapStateToProps)(PageLayout)) 27 | -------------------------------------------------------------------------------- /target/classes/web/src/layouts/index.scss: -------------------------------------------------------------------------------- 1 | .doneHeader { 2 | background: linear-gradient(to right, #404e67 0, #6f85ad 100%); 3 | // padding: 0 0 0 240px; 4 | padding: 0; 5 | ul { 6 | background: transparent; 7 | } 8 | .user { 9 | height: 64px; 10 | text-align: right; 11 | padding: 16px 16px 16px 0; 12 | line-height: 32px; 13 | a { 14 | color: #fff; 15 | height: 32px; 16 | line-height: 32px; 17 | display: inline-block; 18 | } 19 | .ant-dropdown ul.ant-dropdown-menu { 20 | background: #fff; 21 | .ant-dropdown-menu-item > a { 22 | color: rgba(0, 0, 0, 0.65); 23 | } 24 | } 25 | @media screen and (max-width: 576px) { 26 | font-size: 0.8em; 27 | } 28 | @media screen and (max-width: 375px) { 29 | font-size: 0.6em; 30 | } 31 | } 32 | } 33 | .ant-badge { 34 | @media screen and (max-width: 576px) { 35 | font-size: 0.8em; 36 | } 37 | @media screen and (max-width: 375px) { 38 | font-size: 0.6em; 39 | } 40 | } 41 | .logo { 42 | height: 64px; 43 | padding: 16px; 44 | line-height: 32px; 45 | a { 46 | display: inline-block; 47 | height: 32px; 48 | line-height: 32px; 49 | } 50 | img { 51 | max-width: 100%; 52 | max-height: 32px; 53 | } 54 | } 55 | .doneSider { 56 | background: #2b3037; 57 | color: #fff; 58 | padding: 16px 0; 59 | } 60 | .doneSiderUl { 61 | list-style: none; 62 | padding-inline-start: 0px; 63 | margin-bottom: 0; 64 | text-align: center; 65 | li { 66 | padding: 8px; 67 | } 68 | } 69 | .doneSiderItemText { 70 | color: #fff; 71 | display: inline-block; 72 | padding: 4px 0 8px 0; 73 | } 74 | -------------------------------------------------------------------------------- /target/classes/web/src/models/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/src/models/.gitkeep -------------------------------------------------------------------------------- /target/classes/web/src/models/global.js: -------------------------------------------------------------------------------- 1 | export default { 2 | namespace: 'global', 3 | state: {}, 4 | reducers: {}, 5 | effects: {}, 6 | }; 7 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/.umi/TitleWrapper.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default class UmiReactTitle extends React.Component { 4 | componentDidMount() { 5 | document.title = this.props.route._title; 6 | } 7 | getTitle() { 8 | const separator = '' || ' - '; 9 | const title = this.props.route._title.split(separator).map(item => { 10 | return formatMessage({ 11 | id: item.trim(), 12 | defaultMessage: item.trim(), 13 | }); 14 | }) 15 | return title.join(separator); 16 | } 17 | componentWillUnmount() { 18 | if (document.title === this.props.route._title) { 19 | document.title = this.props.route._title; 20 | } 21 | } 22 | render() { 23 | return this.props.children; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/.umi/dva.js: -------------------------------------------------------------------------------- 1 | import dva from 'dva'; 2 | import { Component } from 'react'; 3 | import createLoading from 'dva-loading'; 4 | import history from '@tmp/history'; 5 | 6 | let app = null; 7 | 8 | export function _onCreate() { 9 | const plugins = require('umi/_runtimePlugin'); 10 | const runtimeDva = plugins.mergeConfig('dva'); 11 | app = dva({ 12 | history, 13 | 14 | ...(runtimeDva.config || {}), 15 | ...(window.g_useSSR ? { initialState: window.g_initialData } : {}), 16 | }); 17 | 18 | app.use(createLoading()); 19 | (runtimeDva.plugins || []).forEach(plugin => { 20 | app.use(plugin); 21 | }); 22 | 23 | app.model({ namespace: 'global', ...(require('D:/King/Vue/AgileTC/case-server/src/main/resources/web/src/models/global.js').default) }); 24 | return app; 25 | } 26 | 27 | export function getApp() { 28 | return app; 29 | } 30 | 31 | export class _DvaContainer extends Component { 32 | render() { 33 | const app = getApp(); 34 | app.router(() => this.props.children); 35 | return app.start()(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/.umi/history.js: -------------------------------------------------------------------------------- 1 | // create history 2 | const history = require('umi/lib/createHistory').default({ 3 | basename: window.routerBase, 4 | }); 5 | window.g_history = history; 6 | export default history; 7 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/.umi/polyfills.js: -------------------------------------------------------------------------------- 1 | import 'core-js'; 2 | import 'regenerator-runtime/runtime'; 3 | 4 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/.umi/umiExports.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/src/pages/.umi/umiExports.ts -------------------------------------------------------------------------------- /target/classes/web/src/pages/404.js: -------------------------------------------------------------------------------- 1 | import Redirect from 'umi/redirect'; 2 | export default () => { 3 | return ; 4 | }; 5 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/contrast/index.scss: -------------------------------------------------------------------------------- 1 | .contras_card, 2 | .contras_card_default { 3 | margin: 24px; 4 | .contras_title { 5 | margin-top: -24px; 6 | padding: 16px 0; 7 | > span:first-child { 8 | margin-right: 20px; 9 | color: #000; 10 | font-size: 14px; 11 | } 12 | } 13 | } 14 | .contras_card_default { 15 | .ant-table-thead .ant-table-selection-column .ant-table-header-column { 16 | display: none; 17 | } 18 | } 19 | .historyBox { 20 | padding: 0 20px 20px; 21 | background: white; 22 | .box_title { 23 | display: flex; 24 | justify-content: space-between; 25 | margin-bottom: 5px; 26 | } 27 | .title_history, 28 | .title_color { 29 | .ant-card-head { 30 | border-bottom: 0; 31 | } 32 | .ant-card-head, 33 | > .ant-card-body { 34 | padding: 0; 35 | } 36 | } 37 | .title_color { 38 | width: 300px; 39 | span { 40 | margin-bottom: 15px; 41 | padding: 3px 20px; 42 | color: rgba(0, 0, 0, 0.65); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/document.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 银户通-测试案例智能管理平台 10 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/Banner3.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Button } from 'antd' 3 | import QueueAnim from 'rc-queue-anim' 4 | import Texty from 'rc-texty' 5 | import 'rc-texty/assets/index.css' 6 | 7 | class Banner extends React.PureComponent { 8 | render() { 9 | const { ...currentProps } = this.props 10 | const { dataSource } = currentProps 11 | delete currentProps.dataSource 12 | delete currentProps.isMobile 13 | const children = dataSource.textWrapper.children.map(item => { 14 | const { name, texty, ...$item } = item 15 | if (name.match('button')) { 16 | return ( 17 | 20 | ) 21 | } 22 | 23 | return ( 24 |
25 | {texty ? {item.children} : item.children} 26 |
27 | ) 28 | }) 29 | return ( 30 |
31 | 32 | {children} 33 | 34 |
35 | ) 36 | } 37 | } 38 | export default Banner 39 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/Footer0.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import TweenOne from 'rc-tween-one' 3 | import OverPack from 'rc-scroll-anim/lib/ScrollOverPack' 4 | 5 | class Footer extends React.PureComponent { 6 | render() { 7 | const { ...props } = this.props 8 | const { dataSource } = props 9 | delete props.dataSource 10 | delete props.isMobile 11 | return ( 12 |
13 | 14 | 19 | {dataSource.copyright.children} 20 | 21 | 22 |
23 | ) 24 | } 25 | } 26 | 27 | export default Footer 28 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/data.source.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import logoImg from './img/atclogo4.png' 3 | import getQueryString from '@/utils/getCookies' 4 | const getCookies = getQueryString.getCookie 5 | export const Banner30DataSource = { 6 | wrapper: { className: 'banner3' }, 7 | textWrapper: { 8 | className: 'banner3-text-wrapper', 9 | children: [ 10 | { 11 | name: 'slogan', 12 | className: 'banner3-slogan', 13 | children: ( 14 |
15 | 16 |
17 | 银户通 18 |
19 | ), 20 | }, 21 | { 22 | name: 'name', 23 | className: 'banner3-name', 24 | children: ( 25 | 26 |

一套敏捷的测试用例管理平台

27 |
28 | ), 29 | }, 30 | { 31 | name: 'nameEn', 32 | className: 'banner3-name-en', 33 | children: ( 34 | 35 | 以脑图方式编辑可快速上手,用例关联需求形成流程闭环,并支持组件化引用, 36 |
37 | 可在各个平台嵌入使用,是测试人员的贴心助手 38 |
39 | ), 40 | }, 41 | { 42 | name: 'button', 43 | className: 'banner3-button', 44 | children: ( 45 | 46 |

开始使用

47 |
48 | ), 49 | href: getCookies('username') ? '/case/caseList/1' : `/login?/case/caseList/1`, 50 | }, 51 | ], 52 | }, 53 | } 54 | export const Footer00DataSource = { 55 | wrapper: { className: 'home-page-wrapper footer0-wrapper' }, 56 | OverPack: { className: 'home-page footer0', playScale: 0.05 }, 57 | copyright: { 58 | className: 'copyright', 59 | children: ( 60 | 61 |

62 | Copyright © 2021 深圳市银户通科技有限公司 保留所有版权 63 |

64 |
65 | ), 66 | }, 67 | } 68 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/documentation.md: -------------------------------------------------------------------------------- 1 | # 如何使用: 2 | 3 | - umi 里如何使用[请查看](https://landing.ant.design/docs/use/umi)。 4 | - 其它脚手架使用[请查看](https://landing.ant.design/docs/use/getting-started)。 5 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/img/atclogo4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/src/pages/landing/img/atclogo4.png -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/img/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/src/pages/landing/img/login.png -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/less/antMotionStyle.less: -------------------------------------------------------------------------------- 1 | @import './common.less'; 2 | @import './custom.less'; 3 | @import './content.less'; 4 | @import './banner3.less'; 5 | @import './footer0.less'; 6 | @import './edit.less'; 7 | @import './login.less'; 8 | @import './index.less'; -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/less/common.less: -------------------------------------------------------------------------------- 1 | 2 | // @import "~antd/lib/style/v2-compatible-reset.less"; 3 | 4 | body { 5 | word-wrap: break-word; 6 | } 7 | 8 | body, 9 | div, 10 | dl, 11 | dt, 12 | dd, 13 | ul, 14 | ol, 15 | li, 16 | h1, 17 | h2, 18 | h3, 19 | h4, 20 | h5, 21 | h6 { 22 | margin: 0; 23 | padding: 0; 24 | } 25 | 26 | /* .content-wrapper > .tween-one-leaving, 27 | .queue-anim-leaving { 28 | // position: absolute !important; 29 | // width: 100%; 30 | } */ 31 | 32 | .video { 33 | max-width: 800px; 34 | } 35 | 36 | #react-content { 37 | min-height: 100%; 38 | } 39 | .home-page-wrapper p { 40 | padding: 0; 41 | margin: 0; 42 | } 43 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/less/content.less: -------------------------------------------------------------------------------- 1 | @homepage: home-page; 2 | .@{homepage}-wrapper { 3 | width: 100%; 4 | position: relative; 5 | overflow: hidden; 6 | .@{homepage} { 7 | height: 100%; 8 | max-width: 1200px; 9 | position: relative; 10 | margin: auto; 11 | will-change: transform; 12 | } 13 | .title-wrapper > h1, > h1 { 14 | font-size: 32px; 15 | color: @text-color; 16 | margin-bottom: 16px; 17 | } 18 | .title-wrapper { 19 | margin: 0 auto 64px; 20 | text-align: center; 21 | } 22 | } 23 | 24 | .@{homepage} { 25 | padding: 128px 24px; 26 | } 27 | 28 | @media screen and (max-width: 767px) { 29 | .@{homepage}-wrapper { 30 | .@{homepage} { 31 | padding: 56px 24px; 32 | >h1 { 33 | font-size: 24px; 34 | margin: 0 auto 32px; 35 | &.title-h1 { 36 | margin-bottom: 8px; 37 | } 38 | } 39 | >p { 40 | margin-bottom: 32px; 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/less/custom.less: -------------------------------------------------------------------------------- 1 | @import "~antd/lib/style/themes/default.less"; 2 | 3 | @line-color: #e9e9e9; 4 | 5 | @shadow-color: rgba(0, 0, 0, 0.15); 6 | 7 | @bottom-bar-bg-color: #262626; 8 | @bottom-bar-line-color: #000; 9 | 10 | @template-bg-color: #001529; 11 | @template-bg-color-light: #ececec; 12 | @template-nav-bg-color: #001529; 13 | @template-text-color: #ccc; 14 | @template-text-title-color: #bcbcbc; 15 | @template-text-color-light: #fff; 16 | @template-footer-text-color: #999; 17 | 18 | @animate-duration: .45s; 19 | 20 | /* 详细页图片或框框的样式; 21 | */ 22 | .page-shadow() { 23 | box-shadow: 0 5px 8px @shadow-color; 24 | } 25 | 26 | .page-pro() { 27 | border-radius: 6px; 28 | border: 1px solid @line-color; 29 | transform: translateY(0); 30 | transition: transform .3s @ease-out, box-shadow .3s @ease-out; 31 | &:hover { 32 | .page-shadow(); 33 | transform: translateY(-5px); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/less/edit.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/src/pages/landing/less/edit.less -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/less/footer0.less: -------------------------------------------------------------------------------- 1 | .footer0-wrapper { 2 | background-color: @template-bg-color; 3 | height: 80px; 4 | overflow: hidden; 5 | .footer0 { 6 | height: 100%; 7 | padding: 0 24px; 8 | line-height: 80px; 9 | text-align: center; 10 | color: @template-footer-text-color; 11 | position: relative; 12 | } 13 | } 14 | 15 | @media screen and (max-width: 767px) { 16 | .footer0-wrapper { 17 | .footer0 { 18 | font-size: 12px; 19 | &.home-page { 20 | padding: 0; 21 | } 22 | >div { 23 | width: 90%; 24 | margin: auto; 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/less/index.less: -------------------------------------------------------------------------------- 1 | :global(.ant-dropdown).dropStyle { 2 | :global(.ant-dropdown-menu) { 3 | background-color: #3377ff; 4 | border-radius: 0; 5 | padding: 0; 6 | } 7 | :global(.ant-dropdown-menu-item) { 8 | color: #fff; 9 | padding: 0; 10 | width: auto; 11 | span, 12 | a { 13 | display: block; 14 | height: 50px; 15 | line-height: 50px; 16 | padding: 0 15px; 17 | margin: 0; 18 | color: #fff; 19 | } 20 | } 21 | :global(.ant-dropdown-menu-item):hover, 22 | :global(.ant-dropdown-menu-item-active) { 23 | background-color: rgba(26, 29, 36, 0.5); 24 | } 25 | } 26 | .user { 27 | float: right; 28 | display: flex; 29 | align-items: center; 30 | color: #ffff; 31 | height: 32px; 32 | padding: 0 10px; 33 | background: #3377ff; 34 | border-radius: 4px; 35 | cursor: pointer; 36 | margin-top: 16px; 37 | .userIcon, .dowm { 38 | font-size: large; 39 | } 40 | .username { 41 | white-space: nowrap; 42 | margin: 0 10px; 43 | } 44 | } 45 | .loginCss { 46 | color: #fff; 47 | float: right; 48 | } 49 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/landing/utils.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Button } from 'antd' 3 | 4 | export const isImg = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/ 5 | export const getChildrenToRender = (item, i) => { 6 | let tag = item.name.indexOf('title') === 0 ? 'h1' : 'div' 7 | tag = item.href ? 'a' : tag 8 | let children = 9 | typeof item.children === 'string' && item.children.match(isImg) 10 | ? React.createElement('img', { src: item.children, alt: 'img' }) 11 | : item.children 12 | if (item.name.indexOf('button') === 0 && typeof item.children === 'object') { 13 | children = React.createElement(Button, { 14 | ...item.children, 15 | }) 16 | } 17 | return React.createElement(tag, { key: i.toString(), ...item }, children) 18 | } 19 | -------------------------------------------------------------------------------- /target/classes/web/src/pages/testTask/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Casemgt from '../../components/case/casemgt' 3 | import 'antd/dist/antd.css' 4 | import getQueryString from '@/utils/getCookies' 5 | const getCookies = getQueryString.getCookie 6 | 7 | class casePage extends React.Component { 8 | componentDidMount() { 9 | if (!getCookies('username')) { 10 | window.location.href = `/login?jumpto=${window.location.href}` 11 | } 12 | } 13 | render() { 14 | return getCookies('username') ? ( 15 |
16 | 26 |
27 | ) : null 28 | } 29 | } 30 | export default casePage 31 | -------------------------------------------------------------------------------- /target/classes/web/src/services/global.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/classes/web/src/services/global.js -------------------------------------------------------------------------------- /target/classes/web/src/utils/getCookies.js: -------------------------------------------------------------------------------- 1 | exports.getCookie = function(name) { 2 | function getCookieVal(offset) { 3 | let endstr = document.cookie.indexOf(';', offset); 4 | if (endstr === -1) { 5 | endstr = document.cookie.length; 6 | } 7 | return decodeURI(document.cookie.substring(offset, endstr)); 8 | } 9 | let arg = name + '='; 10 | let alen = arg.length; 11 | let clen = document.cookie.length; 12 | let i = 0; 13 | let j = 0; 14 | while (i < clen) { 15 | j = i + alen; 16 | if (document.cookie.substring(i, j) === arg) return getCookieVal(j); 17 | i = document.cookie.indexOf(' ', i) + 1; 18 | if (i === 0) break; 19 | } 20 | return null; 21 | }; -------------------------------------------------------------------------------- /target/classes/web/src/utils/index.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | getQueryString(name) { 4 | let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); 5 | let r = window.location.search.substr(1).match(reg); 6 | if (r != null) return unescape(r[2]); 7 | return null; 8 | }, 9 | setcookie(name, value) { 10 | let Days = 30; 11 | let exp = new Date(); 12 | exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); 13 | document.cookie = 14 | name + '=' + escape(value) + ';expires=' + exp.toGMTString(); 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /target/classes/web/src/utils/link.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Link from 'umi/link'; 3 | import config from '@/page/index/config'; 4 | 5 | export default class Button extends React.Component { 6 | render() { 7 | let linkTo = config.RouterPrefix + this.props.to; 8 | 9 | return ( 10 | 11 | {this.props.children} 12 | 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /target/classes/web/src/utils/requirementUtils.js: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | export function getRequirmentAllInfos(projectLs, requirementLs, requirementId) { 4 | let initProject = { id: 0, name: '零散需求' }; 5 | if (requirementLs.length === 0) { 6 | return; 7 | } 8 | let options = { projectLs: [], requirementLs: [] }; 9 | let requirement = _.find(requirementLs, temp => { 10 | return temp.id === requirementId; 11 | }); 12 | let project = null; 13 | if (requirement) { 14 | project = _.find(projectLs, temp => { 15 | return temp.id === requirement.iterationId; 16 | }); 17 | } 18 | project = project || initProject; 19 | options.projectLs.push(project); 20 | options.requirementLs = requirementLs.filter(item => item.iterationId === project.id); 21 | return { 22 | project: project, 23 | requirement: requirement, 24 | options: options 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /target/classes/web/webpack.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 不是真实的 webpack 配置,仅为兼容 webstorm 和 intellij idea 代码跳转 3 | * ref: https://github.com/umijs/umi/issues/1109#issuecomment-423380125 4 | */ 5 | 6 | module.exports = { 7 | resolve: { 8 | alias: { 9 | '@': require('path').resolve(__dirname, 'src') 10 | } 11 | }, 12 | configureWebpack: { 13 | devtool: 'source-map' 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst: -------------------------------------------------------------------------------- 1 | com\xiaoju\framework\CaseServerApplicationTests.class 2 | -------------------------------------------------------------------------------- /target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst: -------------------------------------------------------------------------------- 1 | D:\King\Vue\AgileTC\case-server\src\test\java\com\xiaoju\framework\CaseServerApplicationTests.java 2 | -------------------------------------------------------------------------------- /target/test-classes/com/xiaoju/framework/CaseServerApplicationTests.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hagyao520/TestCaseManageSystem/82d5dde690f6100a21968d319220f7b805fbf351/target/test-classes/com/xiaoju/framework/CaseServerApplicationTests.class --------------------------------------------------------------------------------