Showing preview only (2,056K chars total). Download the full file or copy to clipboard to get everything.
Repository: everythingbest/dubbo-postman
Branch: master
Commit: 8523d87af167
Files: 183
Total size: 1.9 MB
Directory structure:
gitextract_z_1p29g2/
├── .babelrc
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .postcssrc.js
├── LICENSE
├── README.MD
├── build/
│ ├── build.js
│ ├── check-versions.js
│ ├── dev-client.js
│ ├── dev-server.js
│ ├── utils.js
│ ├── vue-loader.conf.js
│ ├── webpack.base.conf.js
│ ├── webpack.dev.conf.js
│ └── webpack.prod.conf.js
├── config/
│ ├── dev.env.js
│ ├── index.js
│ └── prod.env.js
├── doc/
│ ├── boot-activity.puml
│ ├── component.puml
│ ├── create-activity.puml
│ ├── projectStructure
│ ├── request-activity.puml
│ ├── rpc-postman.uml
│ └── usecase.puml
├── index.html
├── package.json
├── pom.xml
└── src/
├── main/
│ ├── frontend/
│ │ ├── App.vue
│ │ ├── api/
│ │ │ ├── access.js
│ │ │ ├── associationCase.js
│ │ │ ├── caseRun.js
│ │ │ ├── common.js
│ │ │ ├── config.js
│ │ │ ├── create.js
│ │ │ └── testCase.js
│ │ ├── components/
│ │ │ ├── BackToTop/
│ │ │ │ └── index.vue
│ │ │ ├── Breadcrumb/
│ │ │ │ └── index.vue
│ │ │ ├── GithubCorner/
│ │ │ │ └── index.vue
│ │ │ ├── Hamburger/
│ │ │ │ └── index.vue
│ │ │ ├── ScrollPane/
│ │ │ │ └── index.vue
│ │ │ └── SvgIcon/
│ │ │ └── index.vue
│ │ ├── icons/
│ │ │ ├── index.js
│ │ │ └── svgo.yml
│ │ ├── main.js
│ │ ├── mock/
│ │ │ ├── access.js
│ │ │ ├── associationCase.js
│ │ │ ├── caseRun.js
│ │ │ ├── common.js
│ │ │ ├── config.js
│ │ │ ├── create.js
│ │ │ ├── index.js
│ │ │ └── testCase.js
│ │ ├── router/
│ │ │ └── index.js
│ │ ├── store/
│ │ │ ├── getters.js
│ │ │ ├── index.js
│ │ │ └── modules/
│ │ │ ├── app.js
│ │ │ └── tagsView.js
│ │ ├── styles/
│ │ │ ├── element-ui.scss
│ │ │ ├── index.scss
│ │ │ ├── mixin.scss
│ │ │ ├── sidebar.scss
│ │ │ ├── transition.scss
│ │ │ └── variables.scss
│ │ ├── utils/
│ │ │ ├── formatting.js
│ │ │ ├── get-page-title.js
│ │ │ ├── index.js
│ │ │ └── request.js
│ │ └── views/
│ │ ├── error-page/
│ │ │ ├── 401.vue
│ │ │ └── 404.vue
│ │ ├── layout/
│ │ │ ├── Layout.vue
│ │ │ ├── components/
│ │ │ │ ├── AppMain.vue
│ │ │ │ ├── Navbar.vue
│ │ │ │ ├── Sidebar/
│ │ │ │ │ ├── Item.vue
│ │ │ │ │ ├── Link.vue
│ │ │ │ │ ├── Logo.vue
│ │ │ │ │ ├── SidebarItem.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── TagsView.vue
│ │ │ │ └── index.js
│ │ │ └── mixin/
│ │ │ └── ResizeHandler.js
│ │ ├── pages/
│ │ │ ├── AccessService.vue
│ │ │ ├── CaseManage.vue
│ │ │ ├── CreateService.vue
│ │ │ └── SystemConfig.vue
│ │ └── redirect/
│ │ └── index.vue
│ ├── java/
│ │ └── com/
│ │ └── rpcpostman/
│ │ ├── Main.java
│ │ ├── config/
│ │ │ ├── AppConfig.java
│ │ │ ├── Initializer.java
│ │ │ ├── RedisConfig.java
│ │ │ ├── SessionExpireEntryPoint.java
│ │ │ └── WebSecurityConfig.java
│ │ ├── controller/
│ │ │ ├── AbstractController.java
│ │ │ ├── RpcPostmanClusterController.java
│ │ │ ├── RpcPostmanHomeController.java
│ │ │ ├── RpcPostmanProxyController.java
│ │ │ ├── RpcPostmanSceneTestController.java
│ │ │ ├── RpcPostmanSceneTestRunnerController.java
│ │ │ ├── RpcPostmanServiceCreationController.java
│ │ │ ├── RpcPostmanServiceQueryController.java
│ │ │ └── RpcPostmanTestCaseController.java
│ │ ├── dto/
│ │ │ ├── AbstractCaseDto.java
│ │ │ ├── SceneCaseDto.java
│ │ │ ├── UserCaseDto.java
│ │ │ ├── UserCaseGroupDto.java
│ │ │ └── WebApiRspDto.java
│ │ ├── security/
│ │ │ ├── UserDetails.java
│ │ │ ├── UserDetailsService.java
│ │ │ ├── entity/
│ │ │ │ ├── RoleType.java
│ │ │ │ └── User.java
│ │ │ └── user/
│ │ │ ├── UserService.java
│ │ │ └── impl/
│ │ │ └── UserServiceImpl.java
│ │ ├── service/
│ │ │ ├── GAV.java
│ │ │ ├── Pair.java
│ │ │ ├── context/
│ │ │ │ └── InvokeContext.java
│ │ │ ├── creation/
│ │ │ │ ├── Creator.java
│ │ │ │ ├── entity/
│ │ │ │ │ ├── DubboPostmanService.java
│ │ │ │ │ ├── GrpcPostmanService.java
│ │ │ │ │ ├── InterfaceEntity.java
│ │ │ │ │ ├── MethodEntity.java
│ │ │ │ │ ├── ParamEntity.java
│ │ │ │ │ ├── PostmanService.java
│ │ │ │ │ └── RequestParam.java
│ │ │ │ └── impl/
│ │ │ │ ├── DubboCreator.java
│ │ │ │ └── GrpcCreator.java
│ │ │ ├── invocation/
│ │ │ │ ├── Converter.java
│ │ │ │ ├── Invocation.java
│ │ │ │ ├── Invoker.java
│ │ │ │ ├── ResponseCode.java
│ │ │ │ ├── entity/
│ │ │ │ │ ├── DubboInvocation.java
│ │ │ │ │ ├── DubboParamValue.java
│ │ │ │ │ ├── PostmanDubboRequest.java
│ │ │ │ │ ├── PostmanRequest.java
│ │ │ │ │ └── RpcParamValue.java
│ │ │ │ ├── exception/
│ │ │ │ │ └── ParamException.java
│ │ │ │ └── impl/
│ │ │ │ ├── DubboConverter.java
│ │ │ │ ├── DubboInvoker.java
│ │ │ │ └── GrpcInvoker.java
│ │ │ ├── load/
│ │ │ │ ├── Loader.java
│ │ │ │ ├── classloader/
│ │ │ │ │ └── ApiJarClassLoader.java
│ │ │ │ └── impl/
│ │ │ │ ├── JarLocalFileLoader.java
│ │ │ │ └── JarUrlFileLoader.java
│ │ │ ├── maven/
│ │ │ │ └── Maven.java
│ │ │ ├── registry/
│ │ │ │ ├── Register.java
│ │ │ │ ├── RegisterFactory.java
│ │ │ │ ├── entity/
│ │ │ │ │ └── InterfaceMetaInfo.java
│ │ │ │ └── impl/
│ │ │ │ ├── AbstractRegisterFactory.java
│ │ │ │ ├── DubboRegisterFactory.java
│ │ │ │ ├── RedisRegister.java
│ │ │ │ └── ZkRegister.java
│ │ │ ├── repository/
│ │ │ │ ├── Repository.java
│ │ │ │ └── redis/
│ │ │ │ ├── RedisKeys.java
│ │ │ │ └── RedisRepository.java
│ │ │ └── scenetest/
│ │ │ ├── JSEngine.java
│ │ │ └── SceneTester.java
│ │ └── util/
│ │ ├── BuildUtil.java
│ │ ├── Constant.java
│ │ ├── ExceptionHelper.java
│ │ ├── FileWithString.java
│ │ ├── JSON.java
│ │ ├── LogResultPrintStream.java
│ │ └── XmlUtil.java
│ └── resources/
│ ├── application.properties
│ ├── config/
│ │ └── setting.xml
│ ├── logback.xml
│ ├── public/
│ │ ├── index.html
│ │ └── static/
│ │ ├── css/
│ │ │ ├── app.c775b29c.css
│ │ │ ├── chunk-21b7.d9ef3e45.css
│ │ │ ├── chunk-4c13.f6ea9576.css
│ │ │ ├── chunk-elementUI.bb0f370d.css
│ │ │ └── chunk-libs.2c094f17.css
│ │ └── js/
│ │ ├── app.713c0695.js
│ │ ├── chunk-21b7.2f464e06.js
│ │ ├── chunk-4c13.9e346bf2.js
│ │ ├── chunk-elementUI.753a79b5.js
│ │ ├── chunk-libs.b46743d1.js
│ │ └── cs1M.3da5a21a.js
│ └── script/
│ ├── propertyOperation.js
│ └── sendWrapper.js
└── test/
└── java/
└── com/
└── rpcpostman/
├── service/
│ ├── appfind/
│ │ └── zk/
│ │ └── ZkServiceTest.java
│ └── maven/
│ └── MavenProcessorTest.java
└── util/
└── XmlUtilTest.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .babelrc
================================================
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins":["transform-vue-jsx", "transform-runtime"]
}
================================================
FILE: .eslintignore
================================================
.eslintrc.js
webpack.config.js
================================================
FILE: .eslintrc.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
// http://eslint.org/docs/user-guide/configuring
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module',
ecmaVersion: '2017'
},
env: {
browser: true,
},
extends: [
'eslint:recommended',
'plugin:vue/strongly-recommended'
],
rules: {
'quotes': ['error', 'single'],
'no-console': ['error', {allow: ['warn']}],
'vue/max-attributes-per-line': 'off'
},
// required to lint *.vue files
plugins: ['vue']
};
================================================
FILE: .gitignore
================================================
*.iml
.idea/
target/
node_modules/
================================================
FILE: .postcssrc.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {}
}
}
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2019 everythingbest
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.MD
================================================
DUBBO-POSTMAN
==========
<img src="https://github.com/everythingbest/dubbo-postman/blob/master/gif/logo.png?raw=true" alt="dubbo postman logo" height="90px" align="right" />
**DUBBO-POSTMAN**: 一个用于通过web-ui页面访问dubbo接口的工具,灵感源于
[postman](https://www.getpostman.com/products)
# 介绍
**DUBBO-POSTMAN** 是一个通过web页面访问dubbo接口的开源工具,包括零代码创建一个dubbo consumer,保存访问用例,构建场景测试.
核心功能如下.
- 通过添加一个api的maven dependency即可创建一个dubbo consumer
- webui页面自动生成dto的各个参数
- 保存常用的请求作为用例
- 根据保存的用例即可构建复杂的场景测试,极大减少回归测试的工作量
- 开箱即用
DUBBO-POSTMAN UI
===============
## 开发
基于[vue](https://github.com/vuejs/vue)+
[element-ui](https://element.eleme.cn/#/zh-CN)+
[vue-element-admin](https://panjiachen.github.io/vue-element-admin-site/zh/).
### 准备
下载源码到本地
```
git clone https://github.com/everythingbest/dubbo-postman.git
npm install --registry=https://registry.npm.taobao.org
```
### 本地调试
```
npm run dev
```
### 发布
```
npm run build
```
默认的ui地址是 `http://localhost:9528/`.
后台服务地址是 `http://localhost:8080/`.
DUBBO-POSTMAN BACKEND
===============
首先需要确保代码已经下载到本地,后台的所有配置在项目的src/resource/application.properties文件里面
## 启动
在项目根目录下执行 maven clean package ,然后在命令行执行 java -jar target/dubbo-postman.jar
## application.properties
项目的所有核心配置都在这个文件里面.
在 `application.properties`有三个主要配置.
1. **dubbo.api.jar.dir**: maven-embedder构建的目录.
1. **nexus.url**: 私服仓库地址.
1. **nodex.ip**: redis哨兵配置.
使用演示
===============
<p align="center">
dubbo demo创建
<img align="center" alt="face" src="https://github.com/everythingbest/dubbo-postman/blob/master/gif/dubbo-postman-1.gif?raw=true" />
</p>
<p align="center">
创建服务
<img align="center" alt="face" src="https://github.com/everythingbest/dubbo-postman/blob/master/gif/dubbo-postman-2.gif?raw=true" />
</p>
<p align="center">
场景测试
<img align="center" alt="face" src="https://github.com/everythingbest/dubbo-postman/blob/master/gif/dubbo-postman-3.gif?raw=true" />
</p>
<p align="center">
注册中心添加
<img align="center" alt="face" src="https://github.com/everythingbest/dubbo-postman/blob/master/gif/dubbo-postman-4.gif?raw=true" />
</p>
赞赏
===============
如果你觉得这个项目帮助到了你,你可以帮作者买一杯果汁表示鼓励 🍹
<table>
<tr>
<td width="50%" align="center"><b>AliPay</b></td>
<td width="50%" align="center"><b>WechatPay</b></td>
</tr>
<tr>
<td><img src="https://github.com/everythingbest/dubbo-postman/blob/master/gif/alipay.JPG?raw=true"/></td>
<td><img src="https://github.com/everythingbest/dubbo-postman/blob/master/gif/wechatpay.JPG?raw=true"/></td>
</tr>
</table>
================================================
FILE: build/build.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
require('./check-versions')()
process.env.NODE_ENV = 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const spinner = ora('building for production...')
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(
stats.toString({
colors: true,
modules: false,
children: false,
chunks: false,
chunkModules: false
}) + '\n\n'
)
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(
chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
" Opening index.html over file:// won't work.\n"
)
)
})
})
================================================
FILE: build/check-versions.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')
function exec(cmd) {
return require('child_process')
.execSync(cmd)
.toString()
.trim()
}
const versionRequirements = [
{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node
}
]
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm
})
}
module.exports = function() {
const warnings = []
for (let i = 0; i < versionRequirements.length; i++) {
const mod = versionRequirements[i]
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
warnings.push(
mod.name +
': ' +
chalk.red(mod.currentVersion) +
' should be ' +
chalk.green(mod.versionRequirement)
)
}
}
if (warnings.length) {
console.log('')
console.log(
chalk.yellow(
'To use this template, you must update following to modules:'
)
)
console.log()
for (let i = 0; i < warnings.length; i++) {
const warning = warnings[i]
console.log(' ' + warning)
}
console.log()
process.exit(1)
}
}
================================================
FILE: build/dev-client.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/* eslint-disable */
require('eventsource-polyfill')
var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
hotClient.subscribe(function (event) {
if (event.action === 'reload') {
window.location.reload()
}
})
================================================
FILE: build/dev-server.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
require('./check-versions')()
var config = require('../config')
if (!process.env.NODE_ENV) {
process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
}
var opn = require('opn')
var path = require('path')
var express = require('express')
var webpack = require('webpack')
var proxyMiddleware = require('http-proxy-middleware')
var webpackConfig = require('./webpack.dev.conf')
// default port where dev server listens for incoming traffic
var port = process.env.PORT || config.dev.port
// automatically open browser, if not set will be false
var autoOpenBrowser = !!config.dev.autoOpenBrowser
// Define HTTP proxies to your custom API backend
// https://github.com/chimurai/http-proxy-middleware
var proxyTable = config.dev.proxyTable
var app = express()
var compiler = webpack(webpackConfig)
var devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: webpackConfig.output.publicPath,
quiet: true
})
var hotMiddleware = require('webpack-hot-middleware')(compiler, {
log: () => {}
})
// force page reload when html-webpack-plugin template changes
compiler.plugin('compilation', function (compilation) {
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
hotMiddleware.publish({ action: 'reload' })
cb()
})
})
// proxy api requests
Object.keys(proxyTable).forEach(function (context) {
var options = proxyTable[context]
if (typeof options === 'string') {
options = { target: options }
}
app.use(proxyMiddleware(options.filter || context, options))
})
// handle fallback for HTML5 history API
app.use(require('connect-history-api-fallback')())
// serve webpack bundle output
app.use(devMiddleware)
// enable hot-reload and state-preserving
// compilation error display
app.use(hotMiddleware)
// serve pure static assets
var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
app.use(staticPath, express.static('./static'))
var uri = 'http://localhost:' + port
var _resolve
var readyPromise = new Promise(resolve => {
_resolve = resolve
})
console.log('> Starting dev server...')
devMiddleware.waitUntilValid(() => {
console.log('> Listening at ' + uri + '\n')
// when env is testing, don't need open it
if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
opn(uri)
}
_resolve()
})
var server = app.listen(port)
module.exports = {
ready: readyPromise,
close: () => {
server.close()
}
}
================================================
FILE: build/utils.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
const path = require('path')
const config = require('../config')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const packageConfig = require('../package.json')
exports.assetsPath = function(_path) {
const assetsSubDirectory =
process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function(options) {
options = options || {}
const cssLoader = {
loader: 'css-loader',
options: {
sourceMap: options.sourceMap
}
}
const postcssLoader = {
loader: 'postcss-loader',
options: {
sourceMap: options.sourceMap
}
}
// generate testloader string to be used with extract text plugin
function generateLoaders(loader, loaderOptions) {
const loaders = []
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
loaders.push(MiniCssExtractPlugin.loader)
} else {
loaders.push('vue-style-loader')
}
loaders.push(cssLoader)
if (options.usePostCSS) {
loaders.push(postcssLoader)
}
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
return loaders
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', {
indentedSyntax: true
}),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function(options) {
const output = []
const loaders = exports.cssLoaders(options)
for (const extension in loaders) {
const loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
exports.createNotifierCallback = () => {
const notifier = require('node-notifier')
return (severity, errors) => {
if (severity !== 'error') return
const error = errors[0]
const filename = error.file && error.file.split('!').pop()
notifier.notify({
title: packageConfig.name,
message: severity + ': ' + error.name,
subtitle: filename || '',
icon: path.join(__dirname, 'logo.png')
})
}
}
================================================
FILE: build/vue-loader.conf.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
module.exports = {
//You can set the vue-testloader configuration by yourself.
}
================================================
FILE: build/webpack.base.conf.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const { VueLoaderPlugin } = require('vue-loader')
const vueLoaderConfig = require('./vue-loader.conf')
function resolve(dir) {
return path.join(__dirname, '..', dir)
}
const createLintingRule = () => ({
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src/main/frontend'), resolve('test/main/frontend')],
options: {
formatter: require('eslint-friendly-formatter'),
emitWarning: !config.dev.showEslintErrorsInOverlay
}
})
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
app: './src/main/frontend/main.js'
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath:
process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'@': resolve('src/main/frontend')
}
},
module: {
rules: [
...(config.dev.useEslint ? [createLintingRule()] : []),
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [
resolve('src/main/frontend'),
resolve('test/main/frontend'),
resolve('node_modules/webpack-dev-server/client')
]
},
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [resolve('src/main/frontend/icons')],
options: {
symbolId: 'icon-[name]'
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
exclude: [resolve('src/main/frontend/icons')],
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
},
plugins: [new VueLoaderPlugin()],
node: {
// prevent webpack from injecting useless setImmediate polyfill because Vue
// source contains it (although only uses it if it's native).
setImmediate: false,
// prevent webpack from injecting mocks to Node native modules
// that does not make sense for the client
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty'
}
}
================================================
FILE: build/webpack.dev.conf.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
function resolve(dir) {
return path.join(__dirname, '..', dir)
}
const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)
const devWebpackConfig = merge(baseWebpackConfig, {
mode: 'development',
module: {
rules: utils.styleLoaders({
sourceMap: config.dev.cssSourceMap,
usePostCSS: true
})
},
// cheap-module-eval-source-map is faster for development
devtool: config.dev.devtool,
// these devServer options should be customized in /config/index.js
devServer: {
clientLogLevel: 'warning',
historyApiFallback: true,
hot: true,
compress: true,
host: HOST || config.dev.host,
port: PORT || config.dev.port,
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay
? { warnings: false, errors: true }
: false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable,
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll
}
},
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
new webpack.HotModuleReplacementPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true,
favicon: resolve('src/main/resources/public/favicon.ico'),
title: 'vue-admin-template'
})
]
})
module.exports = new Promise((resolve, reject) => {
portfinder.basePort = process.env.PORT || config.dev.port
portfinder.getPort((err, port) => {
if (err) {
reject(err)
} else {
// publish the new Port, necessary for e2e tests
process.env.PORT = port
// add port to devServer config
devWebpackConfig.devServer.port = port
// Add FriendlyErrorsPlugin
devWebpackConfig.plugins.push(
new FriendlyErrorsPlugin({
compilationSuccessInfo: {
messages: [
`Your application is running here: http://${
devWebpackConfig.devServer.host
}:${port}`
]
},
onErrors: config.dev.notifyOnErrors
? utils.createNotifierCallback()
: undefined
})
)
resolve(devWebpackConfig)
}
})
})
================================================
FILE: build/webpack.prod.conf.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
function resolve(dir) {
return path.join(__dirname, '..', dir)
}
const env = require('../config/prod.env')
// For NamedChunksPlugin
const seen = new Set()
const nameLength = 4
const webpackConfig = merge(baseWebpackConfig, {
mode: 'production',
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true,
usePostCSS: true
})
},
devtool: config.build.productionSourceMap ? config.build.devtool : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash:8].js'),
chunkFilename: utils.assetsPath('js/[name].[chunkhash:8].js')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env
}),
// extract css into its own file
new MiniCssExtractPlugin({
filename: utils.assetsPath('css/[name].[contenthash:8].css'),
chunkFilename: utils.assetsPath('css/[name].[contenthash:8].css')
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
favicon: resolve('src/main/resources/public/favicon.ico'),
title: 'vue-admin-template',
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
}
// default sort mode uses toposort which cannot handle cyclic deps
// in certain cases, and in webpack 4, chunk order in HTML doesn't
// matter anyway
}),
new ScriptExtHtmlWebpackPlugin({
//`runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}),
// keep chunk.id stable when chunk has no name
new webpack.NamedChunksPlugin(chunk => {
if (chunk.name) {
return chunk.name
}
const modules = Array.from(chunk.modulesIterable)
if (modules.length > 1) {
const hash = require('hash-sum')
const joinedHash = hash(modules.map(m => m.id).join('_'))
let len = nameLength
while (seen.has(joinedHash.substr(0, len))) len++
seen.add(joinedHash.substr(0, len))
return `chunk-${joinedHash.substr(0, len)}`
} else {
return modules[0].id
}
}),
// keep module.id stable when vender modules does not change
new webpack.HashedModuleIdsPlugin(),
// copy custom static assets
/* new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../src/frontend/static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}
])*/
],
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // 只打包初始时依赖的第三方
},
elementUI: {
name: 'chunk-elementUI', // 单独将 elementUI 拆包
priority: 20, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app
test: /[\\/]node_modules[\\/]element-ui[\\/]/
}
}
},
runtimeChunk: 'single',
minimizer: [
new UglifyJsPlugin({
uglifyOptions: {
mangle: {
safari10: true
}
},
sourceMap: config.build.productionSourceMap,
cache: true,
parallel: true
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSAssetsPlugin()
]
}
})
if (config.build.productionGzip) {
const CompressionWebpackPlugin = require('compression-webpack-plugin')
webpackConfig.plugins.push(
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' + config.build.productionGzipExtensions.join('|') + ')$'
),
threshold: 10240,
minRatio: 0.8
})
)
}
if (config.build.generateAnalyzerReport || config.build.bundleAnalyzerReport) {
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer')
.BundleAnalyzerPlugin
if (config.build.bundleAnalyzerReport) {
webpackConfig.plugins.push(
new BundleAnalyzerPlugin({
analyzerPort: 8080,
generateStatsFile: false
})
)
}
if (config.build.generateAnalyzerReport) {
webpackConfig.plugins.push(
new BundleAnalyzerPlugin({
analyzerMode: 'static',
reportFilename: 'bundle-report.html',
openAnalyzer: false
})
)
}
}
module.exports = webpackConfig
================================================
FILE: config/dev.env.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"',
BASE_API: '"https://easy-mock.com/mock/5950a2419adc231f356a6636/vue-admin"',
})
================================================
FILE: config/index.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
// Template version: 1.2.6
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 9528, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: true,
errorOverlay: true,
notifyOnErrors: false,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
// Use Eslint Loader?
// If true, your code will be linted during bundling and
// linting errors and warnings will be shown in the console.
useEslint: false,
// If true, eslint errors and warnings will also be shown in the error overlay
// in the browser.
showEslintErrorsInOverlay: false,
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-source-map',
// CSS Sourcemaps off by default because relative paths are "buggy"
// with this option, according to the CSS-Loader README
// (https://github.com/webpack/css-loader#sourcemaps)
// In our experience, they generally work as expected,
// just be aware of this issue when enabling this option.
cssSourceMap: false
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../src/main/resources/public/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../src/main/resources/public'),
assetsSubDirectory: 'static',
/**
* You can set by youself according to actual condition
* You will need to set this if you plan to deploy your site under a sub path,
* for example GitHub pages. If you plan to deploy your site to https://foo.github.io/bar/,
* then assetsPublicPath should be set to "/bar/".
* In most cases please use '/' !!!
*/
assetsPublicPath: '/',
/**
* Source Maps
*/
productionSourceMap: false,
// https://webpack.js.org/configuration/devtool/#production
devtool: 'source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report || false,
// `npm run build:prod --generate_report`
generateAnalyzerReport: process.env.npm_config_generate_report || false
}
}
================================================
FILE: config/prod.env.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
'use strict'
module.exports = {
NODE_ENV: '"production"',
BASE_API: '""',
// BASE_API: '"https://easy-mock.com/mock/5950a2419adc231f356a6636/vue-admin"',
}
================================================
FILE: doc/boot-activity.puml
================================================
@startuml
(*) --> "启动"
--> "读取缓存的注册地址"
--> "连接注册中心"
--> "拉取注册数据"
If "拉取成功" then
--> [Yes] "解析注册数据"
--> "异步注册监听数据项"
--> "根据拉取的注册数据构建服务模型"
--> "缓存服务模型到服务模型表"
--> "结束"
else
--> "打印错误日志"
--> "结束"
Endif
--> (*)
@enduml
================================================
FILE: doc/component.puml
================================================
@startuml
package "scenetest" {
[SceneTester]
}
package "rpcrequest" {
[Rpcrequest]
}
package "context" {
[InvokeContext]
SceneTester --> [InvokeContext]
Rpcrequest --> [InvokeContext]
}
package "creation" {
[Creator]
}
package "load" {
Creator --> [Loader]
InvokeContext --> [Loader]
}
package "registry" {
Creator --> [Register]
}
package "repository" {
Creator --> [Repository]
}
package "invocation" {
[Invoker]
Invoker -->[Convert]
SceneTester --> [Invoker]
}
package "maven" {
Creator --> [mavener]
}
@enduml
================================================
FILE: doc/create-activity.puml
================================================
@startuml
(*) --> "创建服务"
--> "1.根据请求的参数里面的服务元数据从\n服务模型表里提取对应的服务模型"
--> "2.从nexus下载api.jar和api.pom"
--> "3.通过embededmaven 执行api.pom的依赖下载"
--> "4.自定义classloader把依赖路径添加到classpath,加载api.jar"
--> "填充刚才解析的运行时class类数据到1的服务模型属性里面"
If "创建成功" then
--> [Yes] "存储新服务"
--> "返回成功"
--> "结束"
else
--> [No] "返回错误消息"
--> "结束"
Endif
--> (*)
@enduml
================================================
FILE: doc/projectStructure
================================================
1.按层封装 水平划分
2.按功能封装 垂直划分
3.按领域封装 环装---六边型架构
4.按组件封装 组件独立
================================================
FILE: doc/request-activity.puml
================================================
@startuml
(*) --> "请求服务"
--> "反序列化json格式string为map"
--> "根据请求参数里面的服务名称从服务\n模型表里提取服务模型"
--> "判断服务模型是否已经动态加载过"
If "没有加载" then
--> [Yes] "加载服务"
--> "转换请求的参数为class类实例"
else
--> [No] "转换请求的参数为class类实例"
Endif
--> "根据提供的zk地址或者dubbo服务的ip构建dubbo服务的reference"
--> "根据上面的reference和请求参数进行服务的请求"
--> "返回服务的结果"
-->(*)
@enduml
================================================
FILE: doc/rpc-postman.uml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Diagram>
<ID>JAVA</ID>
<OriginalElement>com.dubbo.postman.service.registry.Register</OriginalElement>
<nodes>
<node x="0.0" y="131.0">com.dubbo.postman.service.registry.impl.AbstractRegisterFactory</node>
<node x="0.0" y="842.0">com.dubbo.postman.service.creation.impl.DubboCreator</node>
<node x="393.0" y="0.0">com.dubbo.postman.service.repository.Repository</node>
<node x="529.0" y="454.0">com.dubbo.postman.service.registry.Register</node>
<node x="529.0" y="585.0">com.dubbo.postman.service.registry.impl.ZkRegister</node>
<node x="375.0" y="818.0">com.dubbo.postman.service.load.impl.JarLocalFileLoader</node>
<node x="343.0" y="107.0">com.dubbo.postman.service.repository.redis.RedisRepository</node>
<node x="0.0" y="711.0">com.dubbo.postman.service.creation.Creator</node>
<node x="0.0" y="1077.0">com.dubbo.postman.service.invocation.impl.DubboConverter</node>
<node x="16.5" y="306.0">com.dubbo.postman.service.registry.impl.DubboRegisterFactory</node>
<node x="0.0" y="585.0">com.dubbo.postman.service.invocation.impl.DubboInvoker</node>
<node x="497.5" y="711.0">com.dubbo.postman.service.load.Loader</node>
<node x="43.5" y="0.0">com.dubbo.postman.service.registry.RegisterFactory</node>
<node x="80.5" y="454.0">com.dubbo.postman.service.invocation.Invoker</node>
<node x="114.5" y="968.0">com.dubbo.postman.service.invocation.Converter</node>
</nodes>
<notes />
<edges>
<edge source="com.dubbo.postman.service.invocation.impl.DubboInvoker" target="com.dubbo.postman.service.invocation.Invoker">
<point x="0.0" y="-40.5" />
<point x="0.0" y="40.5" />
</edge>
<edge source="com.dubbo.postman.service.creation.impl.DubboCreator" target="com.dubbo.postman.service.creation.Creator">
<point x="0.0" y="-40.5" />
<point x="0.0" y="40.5" />
</edge>
<edge source="com.dubbo.postman.service.registry.impl.ZkRegister" target="com.dubbo.postman.service.registry.Register">
<point x="0.0" y="-40.5" />
<point x="0.0" y="40.5" />
</edge>
<edge source="com.dubbo.postman.service.load.impl.JarLocalFileLoader" target="com.dubbo.postman.service.load.Loader">
<point x="0.0" y="-40.5" />
<point x="0.0" y="28.5" />
</edge>
<edge source="com.dubbo.postman.service.repository.redis.RedisRepository" target="com.dubbo.postman.service.repository.Repository">
<point x="0.0" y="-117.5" />
<point x="0.0" y="28.5" />
</edge>
<edge source="com.dubbo.postman.service.invocation.impl.DubboConverter" target="com.dubbo.postman.service.invocation.Converter">
<point x="0.0" y="-29.5" />
<point x="0.0" y="29.5" />
</edge>
<edge source="com.dubbo.postman.service.registry.impl.DubboRegisterFactory" target="com.dubbo.postman.service.registry.impl.AbstractRegisterFactory">
<point x="0.0" y="-51.5" />
<point x="0.0" y="62.5" />
</edge>
<edge source="com.dubbo.postman.service.registry.impl.AbstractRegisterFactory" target="com.dubbo.postman.service.registry.RegisterFactory">
<point x="0.0" y="-62.5" />
<point x="0.0" y="40.5" />
</edge>
</edges>
<settings layout="Hierarchic Group" zoom="0.7880622837370242" x="467.0" y="578.0" />
<SelectedNodes />
<Categories>
<Category>Fields</Category>
<Category>Methods</Category>
</Categories>
<SCOPE>All</SCOPE>
<VISIBILITY>public</VISIBILITY>
</Diagram>
================================================
FILE: doc/usecase.puml
================================================
@startuml
User --> (注册中心) : 添加注册地址
(注册中心) --> (拉取注册数据) : 《包括》
(注册中心) --> (监听注册数据) : 《包括》
(注册中心) --> (转换注册数据) : 《包括》
newpage
User --> (创建服务)
(创建服务) --> (下载jar及相关依赖) : 《包括》
(创建服务) --> (动态加载jar) : 《包括》
(创建服务) --> (构建服务) : 《包括》
(创建服务) --> (存储服务) : 《包括》
(创建服务) <--- (更新服务) : 《使用》
newpage
User --> (服务请求)
(服务请求) --> (接收http请求) : 《包括》
(服务请求) --> (http格式转换dubbo格式) : 《包括》
(服务请求) --> (发起dubbo请求) : 《包括》
@enduml
================================================
FILE: index.html
================================================
<!--
~ MIT License
~
~ Copyright (c) 2019 everythingbest
~
~ Permission is hereby granted, free of charge, to any person obtaining a copy
~ of this software and associated documentation files (the "Software"), to deal
~ in the Software without restriction, including without limitation the rights
~ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
~ copies of the Software, and to permit persons to whom the Software is
~ furnished to do so, subject to the following conditions:
~
~ The above copyright notice and this permission notice shall be included in all
~ copies or substantial portions of the Software.
~
~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
~ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
~ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
~ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
~ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
~ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
~ SOFTWARE.
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>RPC-POSTMAN</title>
</head>
<body>
<div id="app">
</div>
</body>
</html>
================================================
FILE: package.json
================================================
{
"name": "dubbo-postman-ui",
"description": "dubbo-postman-ui static resources",
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "node build/build.js",
"build:report": "npm_config_report=true npm run build",
"lint": "eslint --ext .js,.vue src",
"test": "npm run lint",
"svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml"
},
"dependencies": {
"vue-codemirror": "4.0.5",
"codemirror": "^5.10.0",
"vue-table-with-tree-grid": "0.2.4",
"axios": "0.18.0",
"echarts": "^3.3.2",
"element-ui": "2.4.11",
"font-awesome": "^4.7.0",
"nprogress": "0.2.0",
"vue": "2.5.17",
"vue-router": "3.0.1",
"vuex": "3.0.1",
"diff-match-patch": "1.0.4",
"js-cookie": "2.2.0",
"vue-select": "2.0",
"system": "2.0.1",
"file": "0.2.2",
"jsonlint": "1.6.0",
"normalize.css": "7.0.0",
"mockjs": "1.0.1-beta3",
"sortablejs": "1.7.0",
"vue-clipboard2": "0.3.0"
},
"devDependencies": {
"autoprefixer": "8.5.0",
"babel-core": "6.26.0",
"babel-eslint": "8.2.6",
"babel-helper-vue-jsx-merge-props": "2.0.3",
"babel-loader": "7.1.5",
"babel-plugin-syntax-jsx": "6.18.0",
"babel-plugin-transform-runtime": "6.23.0",
"babel-plugin-transform-vue-jsx": "3.7.0",
"babel-preset-env": "1.7.0",
"babel-preset-stage-2": "6.24.1",
"chalk": "2.4.1",
"copy-webpack-plugin": "4.5.2",
"css-loader": "1.0.0",
"eslint": "4.19.1",
"eslint-friendly-formatter": "4.0.1",
"eslint-loader": "2.0.0",
"eslint-plugin-vue": "4.7.1",
"eventsource-polyfill": "0.9.6",
"file-loader": "1.1.11",
"friendly-errors-webpack-plugin": "1.7.0",
"html-webpack-plugin": "4.0.0-alpha",
"mini-css-extract-plugin": "0.4.1",
"node-notifier": "5.2.1",
"node-sass": "^4.7.2",
"optimize-css-assets-webpack-plugin": "5.0.0",
"ora": "3.0.0",
"path-to-regexp": "2.4.0",
"portfinder": "1.0.16",
"postcss-import": "12.0.0",
"postcss-loader": "2.1.6",
"postcss-url": "7.3.2",
"rimraf": "2.6.2",
"sass-loader": "7.0.3",
"script-ext-html-webpack-plugin": "2.0.1",
"semver": "5.5.0",
"shelljs": "0.8.2",
"svg-sprite-loader": "3.8.0",
"svgo": "1.0.5",
"uglifyjs-webpack-plugin": "1.2.7",
"url-loader": "1.0.1",
"vue-loader": "15.3.0",
"vue-style-loader": "4.1.2",
"vue-template-compiler": "2.5.17",
"webpack": "4.16.5",
"webpack-bundle-analyzer": "2.13.1",
"webpack-cli": "3.1.0",
"webpack-dev-server": "3.1.5",
"webpack-merge": "4.1.4",
"extract-text-webpack-plugin": "^2.0.0",
"webpack-dev-middleware": "^1.10.0",
"webpack-hot-middleware": "^2.16.1"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ MIT License
~
~ Copyright (c) 2019 everythingbest
~
~ Permission is hereby granted, free of charge, to any person obtaining a copy
~ of this software and associated documentation files (the "Software"), to deal
~ in the Software without restriction, including without limitation the rights
~ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
~ copies of the Software, and to permit persons to whom the Software is
~ furnished to do so, subject to the following conditions:
~
~ The above copyright notice and this permission notice shall be included in all
~ copies or substantial portions of the Software.
~
~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
~ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
~ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
~ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
~ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
~ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
~ SOFTWARE.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.everythingbest.tool</groupId>
<artifactId>dubbo-postman</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<lombok.version>1.16.6</lombok.version>
<commons-lang3.version>3.4</commons-lang3.version>
<github.feign.version>9.3.1</github.feign.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--embedder maven-->
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-connector-basic</artifactId>
<version>1.0.2.v20150114</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-transport-wagon</artifactId>
<version>1.0.2.v20150114</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<version>2.9</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-provider-api</artifactId>
<version>2.9</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http-lightweight</artifactId>
<version>2.9</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>3.3.3</version>
</dependency>
<!--redis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<!--权限认证-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas</artifactId>
</dependency>
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.3.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<artifactId>tomcat-jdbc</artifactId>
<groupId>org.apache.tomcat</groupId>
</exclusion>
</exclusions>
</dependency>
<!--spring boot end-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.6</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.38</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>rpc-postman</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.3.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.rpcpostman.Main</mainClass>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/node_modules/**</exclude>
</excludes>
</resource>
</resources>
</build>
</project>
================================================
FILE: src/main/frontend/App.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<div id="app">
<transition name="fade"
mode="out-in">
<router-view></router-view>
</transition>
</div>
</template>
<script>
export default {
name:'app',
components:{}
}
</script>
<style>
/*#nprogress .bar {
background: #00ff81;
position: fixed;
z-index: 1031;
top: 0;
left: 0;
width: 100%;
height: 5px;
}*/
</style>
================================================
FILE: src/main/frontend/api/access.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import request from '@/utils/request'
export function getRegisterService(params) {
return request({
url:'/dubbo-postman/result/serviceNames',
method:'get',
params
})
}
export function getAllMethods(params) {
return request({
url:'/dubbo-postman/result/interface',
method:'get',
params
})
}
export function getArgs(params) {
return request({
url:'/dubbo-postman/args',
method:'get',
params
})
}
export function getAllProviders(params) {
return request({
url:'/dubbo-postman/result/interfaceNames',
method:'get',
params
})
}
export function getTemplate(params) {
return request({
url:'/dubbo-postman/result/interface/method/param',
method:'get',
params
})
}
export function getRemoteHistoryTemplate(params) {
return request({
url:'/dubbo-postman/result/template/names',
method:'get',
params
})
}
export function getRemoteAssignedTemplate(params) {
return request({
url:'/dubbo-postman/result/template/get',
method:'get',
params
})
}
export function doRequest(params) {
return request({
url:'/dubbo',
method:'get',
params
})
}
export function saveHisTemplate(params) {
return request({
url:'/dubbo-postman/result/template/save',
method:'get',
params
})
}
================================================
FILE: src/main/frontend/api/associationCase.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import request from '@/utils/request'
export function saveAssociationCase(data) {
return request({
url:'/dubbo-postman/case/scene/save',
method:'post',
data
})
}
export function deleteAssociationCase(params) {
return request({
url:'/dubbo-postman/case/scene/delete',
method:'get',
params
})
}
export function getAllAssociationName(params) {
return request({
url:'/dubbo-postman/case/scene-name/list',
method:'get',
params
})
}
export function getAssociationCase(params) {
return request({
url:'/dubbo-postman/case/scene/get',
method:'get',
params
})
}
================================================
FILE: src/main/frontend/api/caseRun.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import request from '@/utils/request'
export function batchCaseRun(data) {
return request({
url:'/dubbo-postman/case/scene/run',
method:'post',
data
})
}
================================================
FILE: src/main/frontend/api/common.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import request from '@/utils/request'
export function getAllZk(params) {
return request({
url:'/dubbo-postman/all-zk',
method:'get',
params
})
}
export function getEnv(params) {
return request({
url:'/dubbo-postman/env',
method:'get',
params
})
}
================================================
FILE: src/main/frontend/api/config.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import request from '@/utils/request'
export function addConfig(params) {
return request({
url:'/dubbo-postman/new/config',
method:'get',
params
})
}
export function deleteZk(params) {
return request({
url:'/dubbo-postman/zk/del',
method:'get',
params
})
}
export function configs(params) {
return request({
url:'/dubbo-postman/configs',
method:'get',
params
})
}
================================================
FILE: src/main/frontend/api/create.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import request from '@/utils/request'
export function getZkServices(params) {
return request({
url:'/dubbo-postman/result/appNames',
method:'get',
params
})
}
export function upload(params) {
return request({
url:'/dubbo-postman/create',
method:'get',
params
})
}
export function refresh(params) {
return request({
url:'/dubbo-postman/refresh',
method:'get',
params
})
}
================================================
FILE: src/main/frontend/api/testCase.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import request from '@/utils/request'
export function saveCase(data) {
return request({
url:'/dubbo-postman/case/save',
method:'post',
data
})
}
export function getGroupAndCaseName(params) {
return request({
url:'/dubbo-postman/case/group/list',
method:'get',
params
})
}
export function getAllGroupName(params) {
return request({
url:'/dubbo-postman/case/group-name/list',
method:'get',
params
})
}
export function queryCaseDetail(params) {
return request({
url:'/dubbo-postman/case/detail',
method:'get',
params
})
}
export function deleteDetail(params) {
return request({
url:'/dubbo-postman/case/delete',
method:'get',
params
})
}
export function queryAllCaseDetail(params) {
return request({
url:'/dubbo-postman/case/group-case-detail/list',
method:'get',
params
})
}
================================================
FILE: src/main/frontend/components/BackToTop/index.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<transition :name="transitionName">
<div v-show="visible" :style="customStyle" class="back-to-ceiling" @click="backToTop">
<svg width="16" height="16" viewBox="0 0 17 17" xmlns="http://www.w3.org/2000/svg" class="Icon Icon--backToTopArrow" aria-hidden="true" style="height: 16px; width: 16px;">
<title>回到顶部</title>
<g>
<path d="M12.036 15.59c0 .55-.453.995-.997.995H5.032c-.55 0-.997-.445-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29c.39-.39 1.026-.385 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z" fill-rule="evenodd"/>
</g>
</svg>
</div>
</transition>
</template>
<script>
export default {
name: 'BackToTop',
props: {
visibilityHeight: {
type: Number,
default: 400
},
backPosition: {
type: Number,
default: 0
},
customStyle: {
type: Object,
default: function() {
return {
right: '50px',
bottom: '50px',
width: '40px',
height: '40px',
'border-radius': '4px',
'line-height': '45px',
background: '#e7eaf1'
}
}
},
transitionName: {
type: String,
default: 'fade'
}
},
data() {
return {
visible: false,
interval: null,
isMoving: false
}
},
mounted() {
window.addEventListener('scroll', this.handleScroll)
},
beforeDestroy() {
window.removeEventListener('scroll', this.handleScroll)
if (this.interval) {
clearInterval(this.interval)
}
},
methods: {
handleScroll() {
this.visible = window.pageYOffset > this.visibilityHeight
},
backToTop() {
if (this.isMoving) return
const start = window.pageYOffset
let i = 0
this.isMoving = true
this.interval = setInterval(() => {
const next = Math.floor(this.easeInOutQuad(10 * i, start, -start, 500))
if (next <= this.backPosition) {
window.scrollTo(0, this.backPosition)
clearInterval(this.interval)
this.isMoving = false
} else {
window.scrollTo(0, next)
}
i++
}, 16.7)
},
easeInOutQuad(t, b, c, d) {
if ((t /= d / 2) < 1) return c / 2 * t * t + b
return -c / 2 * (--t * (t - 2) - 1) + b
}
}
}
</script>
<style scoped>
.back-to-ceiling {
position: fixed;
display: inline-block;
text-align: center;
cursor: pointer;
}
.back-to-ceiling:hover {
background: #d5dbe7;
}
.fade-enter-active,
.fade-leave-active {
transition: opacity .5s;
}
.fade-enter,
.fade-leave-to {
opacity: 0
}
.back-to-ceiling .Icon {
fill: #9aaabf;
background: none;
}
</style>
================================================
FILE: src/main/frontend/components/Breadcrumb/index.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<el-breadcrumb class="app-breadcrumb" separator="/">
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item,index) in levelList" v-if="item.meta.title&&item.meta.breadcrumb!==false" :key="item.path">
<span v-if="item.redirect==='noredirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
</template>
<script>
import pathToRegexp from 'path-to-regexp'
export default {
data() {
return {
levelList: null
}
},
watch: {
$route() {
this.getBreadcrumb()
}
},
created() {
this.getBreadcrumb()
},
methods: {
getBreadcrumb() {
let matched = this.$route.matched.filter(item => {
if (item.name) {
return true
}
})
const first = matched[0]
if (first) {
matched = [{ path: '/access/index', meta: { title: 'RPC-POSTMAN' }}].concat(matched)
}
this.levelList = matched
},
pathCompile(path) {
// To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
const { params } = this.$route
var toPath = pathToRegexp.compile(path)
return toPath(params)
},
handleLink(item) {
const { redirect, path } = item
if (redirect) {
this.$router.push(redirect)
return
}
this.$router.push(this.pathCompile(path))
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.app-breadcrumb.el-breadcrumb {
display: inline-block;
font-size: 14px;
line-height: 50px;
margin-left: 10px;
.no-redirect {
color: #97a8be;
cursor: text;
}
}
</style>
================================================
FILE: src/main/frontend/components/GithubCorner/index.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<a href="https://github.com/PanJiaChen/vue-element-admin" target="_blank" class="github-corner" aria-label="View source on Github">
<svg
width="80"
height="80"
viewBox="0 0 250 250"
style="fill:#40c9c6; color:#fff;"
aria-hidden="true">
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"/>
<path
d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
fill="currentColor"
style="transform-origin: 130px 106px;"
class="octo-arm"/>
<path
d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
fill="currentColor"
class="octo-body"/>
</svg>
</a>
</template>
<style scoped>
.github-corner:hover .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
@keyframes octocat-wave {
0%,
100% {
transform: rotate(0)
}
20%,
60% {
transform: rotate(-25deg)
}
40%,
80% {
transform: rotate(10deg)
}
}
@media (max-width:500px) {
.github-corner:hover .octo-arm {
animation: none
}
.github-corner .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
}
</style>
================================================
FILE: src/main/frontend/components/Hamburger/index.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<div>
<svg
:class="{'is-active':isActive}"
t="1492500959545"
class="hamburger"
style=""
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="1691"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="64"
height="64"
@click="toggleClick">
<path
d="M966.8023 568.849776 57.196677 568.849776c-31.397081 0-56.850799-25.452695-56.850799-56.850799l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 543.397081 998.200404 568.849776 966.8023 568.849776z"
p-id="1692" />
<path
d="M966.8023 881.527125 57.196677 881.527125c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 856.07443 998.200404 881.527125 966.8023 881.527125z"
p-id="1693" />
<path
d="M966.8023 256.17345 57.196677 256.17345c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.850799 56.850799-56.850799l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.850799l0 0C1023.653099 230.720755 998.200404 256.17345 966.8023 256.17345z"
p-id="1694" />
</svg>
</div>
</template>
<script>
export default {
name: 'Hamburger',
props: {
isActive: {
type: Boolean,
default: false
},
toggleClick: {
type: Function,
default: null
}
}
}
</script>
<style scoped>
.hamburger {
display: inline-block;
cursor: pointer;
width: 20px;
height: 20px;
transform: rotate(90deg);
transition: .38s;
transform-origin: 50% 50%;
}
.hamburger.is-active {
transform: rotate(0deg);
}
</style>
================================================
FILE: src/main/frontend/components/ScrollPane/index.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<el-scrollbar ref="scrollContainer" :vertical="false" class="scroll-container" @wheel.native.prevent="handleScroll">
<slot/>
</el-scrollbar>
</template>
<script>
const tagAndTagSpacing = 4 // tagAndTagSpacing
export default {
name: 'ScrollPane',
data() {
return {
left: 0
}
},
methods: {
handleScroll(e) {
const eventDelta = e.wheelDelta || -e.deltaY * 40
const $scrollWrapper = this.$refs.scrollContainer.$refs.wrap
$scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4
},
moveToTarget(currentTag) {
const $container = this.$refs.scrollContainer.$el
const $containerWidth = $container.offsetWidth
const $scrollWrapper = this.$refs.scrollContainer.$refs.wrap
const tagList = this.$parent.$refs.tag
let firstTag = null
let lastTag = null
// find first tag and last tag
if (tagList.length > 0) {
firstTag = tagList[0]
lastTag = tagList[tagList.length - 1]
}
if (firstTag === currentTag) {
$scrollWrapper.scrollLeft = 0
} else if (lastTag === currentTag) {
$scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth
} else {
// find preTag and nextTag
const currentIndex = tagList.findIndex(item => item === currentTag)
const prevTag = tagList[currentIndex - 1]
const nextTag = tagList[currentIndex + 1]
// the tag's offsetLeft after of nextTag
const afterNextTagOffsetLeft = nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing
// the tag's offsetLeft before of prevTag
const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing
if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {
$scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth
} else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {
$scrollWrapper.scrollLeft = beforePrevTagOffsetLeft
}
}
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.scroll-container {
white-space: nowrap;
position: relative;
overflow: hidden;
width: 100%;
/deep/ {
.el-scrollbar__bar {
bottom: 0px;
}
.el-scrollbar__wrap {
height: 49px;
}
}
}
</style>
================================================
FILE: src/main/frontend/components/SvgIcon/index.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconName"/>
</svg>
</template>
<script>
export default {
name: 'SvgIcon',
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String,
default: ''
}
},
computed: {
iconName() {
return `#icon-${this.iconClass}`
},
svgClass() {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
}
}
}
</script>
<style scoped>
.svg-icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>
================================================
FILE: src/main/frontend/icons/index.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon' // svg组件
// register globally
Vue.component('svg-icon', SvgIcon)
const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('./svg', false, /\.svg$/)
requireAll(req)
================================================
FILE: src/main/frontend/icons/svgo.yml
================================================
# replace default config
# multipass: true
# full: true
plugins:
# - name
#
# or:
# - name: false
# - name: true
#
# or:
# - name:
# param1: 1
# param2: 2
- removeAttrs:
attrs:
- 'fill'
- 'fill-rule'
================================================
FILE: src/main/frontend/main.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import Vue from 'vue'
import 'font-awesome/css/font-awesome.min.css'
import VueCodemirror from 'vue-codemirror'
import 'codemirror/lib/codemirror.css'
import'codemirror/addon/fold/foldgutter.css'
import'codemirror/addon/fold/brace-fold.js'
import'codemirror/addon/fold/comment-fold.js'
import'codemirror/addon/fold/foldcode.js'
import'codemirror/addon/fold/foldgutter.js'
import'codemirror/addon/fold/indent-fold.js'
import'codemirror/addon/fold/markdown-fold.js'
import'codemirror/addon/fold/xml-fold.js'
import 'codemirror/mode/javascript/javascript';
import 'codemirror/addon/scroll/annotatescrollbar.js'
import 'codemirror/addon/search/match-highlighter.js'
import 'codemirror/addon/search/searchcursor.js'
import 'codemirror/addon/search/search.js'
import 'codemirror/addon/search/jump-to-line.js'
import 'codemirror/addon/search/matchesonscrollbar.css'
import 'codemirror/addon/search/matchesonscrollbar.js'
import 'codemirror/addon/display/fullscreen.js'
import 'codemirror/addon/display/fullscreen.css'
import 'codemirror/theme/monokai.css'
import 'codemirror/theme/eclipse.css'
import 'codemirror/theme/zenburn.css'
import 'codemirror/theme/darcula.css'
import 'codemirror/theme/elegant.css'
import 'codemirror/addon/dialog/dialog.css'
import 'codemirror/addon/dialog/dialog.js'
import NProgress from 'nprogress';
import 'nprogress/nprogress.css'
import VueClipboard from 'vue-clipboard2' //复制功能
import 'normalize.css/normalize.css' // A modern alternative to CSS resets
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
import 'element-ui/lib/theme-chalk/base.css'; // fade/zoom 等
import CollapseTransition from 'element-ui/lib/transitions/collapse-transition'
import getPageTitle from '@/utils/get-page-title'
import '@/styles/index.scss' // global css
import App from './App'
import router from './router'
import store from './store'
import '@/icons'
//如果是本地调试就使用,在build的时候正注释掉这行
//import './mock'
Vue.prototype.$NProgress = NProgress;
Vue.component('collapse-transition', CollapseTransition)
Vue.use( VueClipboard )
Vue.use(ElementUI, { locale })
Vue.use(VueCodemirror)
Vue.config.productionTip = false
NProgress.configure({
showSpinner: false
});
router.beforeEach(async(to, from, next) => {
NProgress.start()
document.title = getPageTitle(to.meta.title)
next()
})
router.afterEach(() => {
NProgress.done()
});
new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
================================================
FILE: src/main/frontend/mock/access.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
export default {
getTemplate: (params) => {
console.log("mock接收getTemplate",params);
return {
code: 0,
error:'服务超时',
data: {
"arg0":"127.0.0.1:8080",
"name":123
}
}
},
saveHisTemplate:(params) => {
console.log("mock接收saveHisTemplate",params);
return {
code: 0,
error:'服务超时',
data: {"code":0,"name":"sgweg"}
}
},
doRequest:(params) => {
console.log("mock接收doRequest",params);
return {
actualResponse:{"test":12134,"name":"sgweg"},
testResponse:{"test":12134,"name":"sgweg","用例1":true,"用例2":false}
}
},
getAllMethods:(params) => {
console.log("mock接收getAllMethods",params);
return {
code: 0,
error:'服务超时',
data: [
"method1"
]
}
},
getAllProviders:(params)=>{
console.log("mock接收getAllProviders",params);
return {
code: 0,
error:'服务超时',
data: {
'abc':"a/sdg",
'def':"a/sdg",
'sgd':"a/sdg"
}
}
},
getRegisterService:(params)=>{
console.log("mock接收getRegisterService",params);
return {
code: 0,
error:'服务超时',
data: ['abc','def','sgd']
}
},
}
================================================
FILE: src/main/frontend/mock/associationCase.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
export default {
saveAssociationCase:(data)=>{
console.log("mock接收saveAssociationCase",data);
return {
code: 0,
error:'',
data:true
}
},
getAllAssociationName:(params)=>{
console.log("mock接收getAllAssociationName",params);
return {
code: 0,
error:'',
data:["ABC","123"]
}
},
getAssociationCase:(params)=>{
console.log("mock接收getAssociationCase",params);
return {
code: 0,
error:'',
data:{
sceneScript:'var content = reqs[0].body;\n' +
'rst.put("content",content);\n' +
'var requestObj = JSON.parse(content);\n' +
'requestObj.type = 1;\n' +
'reqs[0].body = JSON.stringify(requestObj);\n' +
'var result = sender.send(reqs[0]);\n' +
'var obj = JSON.parse(result);\n' +
'var code = obj.data;\n' +
'rst.put("result",result);\n' +
'rst.put("code",code);',
caseDtoList:[{
caseName:'a',
groupName:'test',
zkAddress:'10.0.1.1:990',
serviceName:'test-service',
providerName:'provider-name',
className:'provider-name',
methodName:'method-name',
requestValue:'{"sdgg":242,"nmae":"gwegt"}',
testScript:'{"sdgg":242,"nmae":"gwegt"}'
}]
}
}
},
deleteAssociationCase:(params)=>{
console.log("mock接收deleteAssociationCase",params);
return {
code: 0,
error:'',
data:"ok"
}
},
}
================================================
FILE: src/main/frontend/mock/caseRun.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
export default {
batchCaseRun:(data)=>{
console.log("mock接收batchCaseRun",data);
return {
code: 0,
error:'',
data:{
"test1":true,
"name":"test",
"obj":{
"name":"obj"
}
}
}
},
}
================================================
FILE: src/main/frontend/mock/common.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
export default {
getAllZk:(params)=>{
console.log("mock接收getAllZk",params);
return {
code: 0,
error:'服务超时',
data: ["127.0.0.1:8080","127.0.0.1:8081"]
}
},
}
================================================
FILE: src/main/frontend/mock/config.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
export default {
addConfig:(params)=>{
console.log("mock接收addConfig",params);
return {
code: 0,
error:'服务超时',
data: 'ok'
}
},
deleteZk:(params)=>{
console.log("mock接收deleteZk",params);
return {
code: 0,
error:'服务超时',
data: 'ok'
}
},
configs:(params)=>{
console.log("mock接收configs",params);
return {
code: 0,
error:'服务超时',
data: ["127.0.0.1:8081,127.0.0.1:8081,127.0.0.1:8081,127.0.0.1:8081","127.0.0.1:8082"]
}
},
}
================================================
FILE: src/main/frontend/mock/create.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
export default {
upload:(params)=>{
console.log("mock接收upload",params);
return {
code: 0,
error:'',
data:{}
}
},
refresh:(params)=>{
console.log("mock接收refresh",params);
return {
code: 0,
error:'超时',
data:{}
}
},
getZkServices:(params)=>{
console.log("mock接收getZkServices",params);
return {
code: 0,
error:'服务超时',
data:["abc","def","sdb"]
}
},
}
================================================
FILE: src/main/frontend/mock/index.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import Mock from 'mockjs'
import accessApi from './access'
import createApi from './create'
import commonApi from './common'
import configApi from './config'
import testCase from './testCase'
import caseRun from './caseRun'
import associationCase from './associationCase'
Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
Mock.XHR.prototype.send = function() {
if (this.custom.xhr) {
this.custom.xhr.withCredentials = this.withCredentials || false
}
this.proxy_send(...arguments)
}
// Mock.setup({
// timeout: '350-600'
// })
//服务访问相关
Mock.mock(/dubbo-postman\/result\/interface\/method\/param/, 'get', accessApi.getTemplate);
Mock.mock(/dubbo-postman\/result\/template\/save/, 'get', accessApi.saveHisTemplate);
Mock.mock(/dubbo/, 'get', accessApi.doRequest);
Mock.mock(/dubbo-postman\/result\/interfaceNames/, 'get', accessApi.getAllProviders);
Mock.mock(/dubbo-postman\/result\/interface/, 'get', accessApi.getAllMethods);
Mock.mock(/dubbo-postman\/result\/serviceNames/, 'get', accessApi.getRegisterService);
//服务创建相关
Mock.mock(/dubbo-postman\/create/, 'get', createApi.upload);
Mock.mock(/dubbo-postman\/refresh/, 'get', createApi.refresh);
Mock.mock(/dubbo-postman\/result\/appNames/, 'get', createApi.getZkServices);
//共功模块
Mock.mock(/dubbo-postman\/all-zk/, 'get', commonApi.getAllZk);
//config模块
Mock.mock(/dubbo-postman\/configs/, 'get', configApi.configs);
Mock.mock(/dubbo-postman\/zk\/del/, 'get', configApi.deleteZk);
//测试case相关
Mock.mock(/dubbo-postman\/case\/save/, 'post', testCase.saveCase);
Mock.mock(/dubbo-postman\/case\/group\/list/, 'get', testCase.getGroupAndCaseName);
Mock.mock(/dubbo-postman\/case\/group-name\/list/, 'get', testCase.getAllGroupName);
Mock.mock(/dubbo-postman\/case\/group-case-detail\/list/, 'get', testCase.queryAllCaseDetail);
Mock.mock(/dubbo-postman\/case\/detail/, 'get', testCase.queryCaseDetail);
Mock.mock(/dubbo-postman\/case\/delete/, 'get', testCase.deleteDetail);
//用例运行相关
Mock.mock(/dubbo-postman\/case\/multiple\/run/, 'post', caseRun.batchCaseRun);
//关联用例相关
Mock.mock(/dubbo-postman\/case\/association\/save/, 'post', associationCase.saveAssociationCase);
Mock.mock(/dubbo-postman\/case\/association-name\/list/, 'get', associationCase.getAllAssociationName);
Mock.mock(/dubbo-postman\/case\/association\/get/, 'get', associationCase.getAssociationCase);
Mock.mock(/dubbo-postman\/case\/association\/delete/, 'get', associationCase.deleteAssociationCase);
export default Mock
================================================
FILE: src/main/frontend/mock/testCase.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
export default {
saveCase:(data)=>{
console.log("mock接收saveCase",data);
return {
code: 0,
error:'',
data:true
}
},
getGroupAndCaseName:(params)=>{
console.log("mock接收getGroupAndCaseName",params);
return {
code: 0,
error:'',
data:[
{
value: '通知服务',
label: '通知服务',
children: [{
value: '测试测试1',
label: '测试测试1',
}]
},
{
value: '城市服务',
label: '城市服务',
children: [{
value: '测试测试2',
label: '测试测试2',
}]
}
]
}
},
getAllGroupName:(params)=>{
console.log("mock接收getALLGroupName",params);
return {
code: 0,
error:'',
data:["ABC","123"]
}
},
queryCaseDetail:(params)=>{
console.log("mock接收queryCaseDetail",params);
return {
code: 0,
error:'',
data:{
caseName:'a',
groupName:'test',
zkAddress:'10.0.1.1:990',
serviceName:'test-service',
providerName:'provider-name',
className:'provider-name',
methodName:'method-name',
requestValue:'{"sdgg":242,"nmae":"gwegt"}',
testScript:'{"sdgg":242,"nmae":"gwegt"}'
}
}
},
deleteDetail:(params)=>{
console.log("mock接收deleteDetail",params);
return {
code: 0,
error:'',
data:"ok"
}
},
queryAllCaseDetail:(params)=>{
console.log("mock接收queryAllCaseDetail",params);
return {
code: 0,
error:'',
data:[{
caseName:'a',
groupName:'test',
zkAddress:'10.0.1.1:990',
serviceName:'test-service',
providerName:'provider-name',
className:'provider-name',
methodName:'method-name',
requestValue:'{"sdgg":242,"nmae":"gwegt"}',
responseValue:'{"sdgg":242,"nmae":"gwegt"}',
testScript:"{\"sdgg\":242,\"nmae\":\"gwegt\"}"
},
{
caseName:'a1-testDto-testcaseb',
groupName:'test1-test2',
zkAddress:'10.0.1.1:990',
serviceName:'a1-testDto',
className:'ServiceDto',
providerName:'default/com/dubbo/postman/TestProvider/1/0/0',
methodName:'method-name244(sdgasd,sdgsg,gege,wegw,wegwgwe,wegwgw)',
responseValue:'{\n' +
' "arg0":{\n' +
'\t"id":1,\n' +
'\t"name":"postman",\n' +
'\t"time":"2019-01-11 12:12:12"\n' +
' }\n' +
'}',
requestValue:'{\n' +
' "arg0":{\n' +
'\t"id":1,\n' +
'\t"name":"postman",\n' +
'\t"time":"2019-01-11 12:12:12"\n' +
' }\n' +
'}',
testScript:"{\"sdgg\":242,\"nmae\":\"gwegt\"}"
}]
}
},
}
================================================
FILE: src/main/frontend/router/index.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
import Layout from '@/views/layout/Layout'
import Create from '@/views/pages/CreateService.vue'
import Access from '@/views/pages/AccessService.vue'
import Config from '@/views/pages/SystemConfig.vue'
import CaseManage from '@/views/pages/CaseManage.vue'
export const constantRouterMap = [
{
path: '/redirect',
component: Layout,
hidden: true,
children: [
{
path: '/redirect/:path*',
component: () => import('@/views/redirect/index')
}
]
},
{
path: '/',
component: Layout,
redirect: '/access/index',
name: 'accessService',
hidden: true,
children: [{
path: 'access',
component: Access
}]
},
{
path: '/access',
component: Layout,
redirect: '/access/index',
children: [
{
path: 'index',
component: Access,
meta: { title: '访问服务', icon: 'table' },
name: 'accessService'
},
]
},
{
path: '/case-manage',
component: Layout,
redirect: '/case-manage/index',
children: [
{
path: 'index',
component: CaseManage,
meta: { title: '场景测试', icon: 'nested' },
name: 'sceneManage'
},
]
},
{
path: '/create',
redirect: '/create/index',
component: Layout,
children: [
{
path: 'index',
component: Create,
meta: { title: '创建服务', icon: 'tab' },
name: 'createService'
},
]
},
{
path: '/config',
component: Layout,
children: [
{
path: 'index',
component: Config,
meta: { title: '注册中心', icon: 'list' },
name: 'systemConfig'
},
]
},
{
path: 'external-link',
component: Layout,
children: [
{
path: 'https://github.com/everythingbest/dubbo-postman/tree/master',
meta: { title: '使用帮助', icon: 'guide' }
}
]
},
{
path: '/404',
meta: { title: '404页面'},
component: () => import('@/views/error-page/404'),
hidden: true
},
{
path: '/401',
meta: { title: '401页面'},
component: () => import('@/views/error-page/401'),
hidden: true
},
{ path: '*', redirect: '/404', hidden: true }
]
export default new Router({
// mode: 'history', //后端支持可开
scrollBehavior: () => ({ y: 0 }),
routes: constantRouterMap
})
================================================
FILE: src/main/frontend/store/getters.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
const getters = {
sidebar: state => state.app.sidebar,
device: state => state.app.device,
visitedViews: state => state.tagsView.visitedViews,
cachedViews: state => state.tagsView.cachedViews,
}
export default getters
================================================
FILE: src/main/frontend/store/index.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
Vue.use(Vuex)
// https://webpack.js.org/guides/dependency-management/#requirecontext
const modulesFiles = require.context('./modules', false, /\.js$/)
// you do not need `import app from './modules/app'`
// it will auto require all vuex module from modules file
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
// set './app.js' => 'app'
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
const value = modulesFiles(modulePath)
modules[moduleName] = value.default
return modules
}, {})
const store = new Vuex.Store({
modules,
getters
})
export default store
================================================
FILE: src/main/frontend/store/modules/app.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import Cookies from 'js-cookie'
const app = {
state: {
sidebar: {
opened: !+Cookies.get('sidebarStatus'),
withoutAnimation: false
},
device: 'desktop'
},
mutations: {
TOGGLE_SIDEBAR: state => {
if (state.sidebar.opened) {
Cookies.set('sidebarStatus', 1)
} else {
Cookies.set('sidebarStatus', 0)
}
state.sidebar.opened = !state.sidebar.opened
state.sidebar.withoutAnimation = false
},
CLOSE_SIDEBAR: (state, withoutAnimation) => {
Cookies.set('sidebarStatus', 1)
state.sidebar.opened = false
state.sidebar.withoutAnimation = withoutAnimation
},
TOGGLE_DEVICE: (state, device) => {
state.device = device
}
},
actions: {
ToggleSideBar: ({ commit }) => {
commit('TOGGLE_SIDEBAR')
},
CloseSideBar({ commit }, { withoutAnimation }) {
commit('CLOSE_SIDEBAR', withoutAnimation)
},
ToggleDevice({ commit }, device) {
commit('TOGGLE_DEVICE', device)
}
}
}
export default app
================================================
FILE: src/main/frontend/store/modules/tagsView.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
const state = {
visitedViews: [],
cachedViews: []
}
const mutations = {
ADD_VISITED_VIEW: (state, view) => {
if (state.visitedViews.some(v => v.path === view.path)) return
state.visitedViews.push(
Object.assign({}, view, {
title: view.meta.title || 'no-name'
})
)
},
ADD_CACHED_VIEW: (state, view) => {
if (state.cachedViews.includes(view.name)) return
if (!view.meta.noCache) {
state.cachedViews.push(view.name)
}
},
DEL_VISITED_VIEW: (state, view) => {
for (const [i, v] of state.visitedViews.entries()) {
if (v.path === view.path) {
state.visitedViews.splice(i, 1)
break
}
}
},
DEL_CACHED_VIEW: (state, view) => {
for (const i of state.cachedViews) {
if (i === view.name) {
const index = state.cachedViews.indexOf(i)
state.cachedViews.splice(index, 1)
break
}
}
},
DEL_OTHERS_VISITED_VIEWS: (state, view) => {
state.visitedViews = state.visitedViews.filter(v => {
return v.meta.affix || v.path === view.path
})
},
DEL_OTHERS_CACHED_VIEWS: (state, view) => {
for (const i of state.cachedViews) {
if (i === view.name) {
const index = state.cachedViews.indexOf(i)
state.cachedViews = state.cachedViews.slice(index, index + 1)
break
}
}
},
DEL_ALL_VISITED_VIEWS: state => {
// keep affix tags
const affixTags = state.visitedViews.filter(tag => tag.meta.affix)
state.visitedViews = affixTags
},
DEL_ALL_CACHED_VIEWS: state => {
state.cachedViews = []
},
UPDATE_VISITED_VIEW: (state, view) => {
for (let v of state.visitedViews) {
if (v.path === view.path) {
v = Object.assign(v, view)
break
}
}
}
}
const actions = {
addView({ dispatch }, view) {
dispatch('addVisitedView', view)
dispatch('addCachedView', view)
},
addVisitedView({ commit }, view) {
commit('ADD_VISITED_VIEW', view)
},
addCachedView({ commit }, view) {
commit('ADD_CACHED_VIEW', view)
},
delView({ dispatch, state }, view) {
return new Promise(resolve => {
dispatch('delVisitedView', view)
dispatch('delCachedView', view)
resolve({
visitedViews: [...state.visitedViews],
cachedViews: [...state.cachedViews]
})
})
},
delVisitedView({ commit, state }, view) {
return new Promise(resolve => {
commit('DEL_VISITED_VIEW', view)
resolve([...state.visitedViews])
})
},
delCachedView({ commit, state }, view) {
return new Promise(resolve => {
commit('DEL_CACHED_VIEW', view)
resolve([...state.cachedViews])
})
},
delOthersViews({ dispatch, state }, view) {
return new Promise(resolve => {
dispatch('delOthersVisitedViews', view)
dispatch('delOthersCachedViews', view)
resolve({
visitedViews: [...state.visitedViews],
cachedViews: [...state.cachedViews]
})
})
},
delOthersVisitedViews({ commit, state }, view) {
return new Promise(resolve => {
commit('DEL_OTHERS_VISITED_VIEWS', view)
resolve([...state.visitedViews])
})
},
delOthersCachedViews({ commit, state }, view) {
return new Promise(resolve => {
commit('DEL_OTHERS_CACHED_VIEWS', view)
resolve([...state.cachedViews])
})
},
delAllViews({ dispatch, state }, view) {
return new Promise(resolve => {
dispatch('delAllVisitedViews', view)
dispatch('delAllCachedViews', view)
resolve({
visitedViews: [...state.visitedViews],
cachedViews: [...state.cachedViews]
})
})
},
delAllVisitedViews({ commit, state }) {
return new Promise(resolve => {
commit('DEL_ALL_VISITED_VIEWS')
resolve([...state.visitedViews])
})
},
delAllCachedViews({ commit, state }) {
return new Promise(resolve => {
commit('DEL_ALL_CACHED_VIEWS')
resolve([...state.cachedViews])
})
},
updateVisitedView({ commit }, view) {
commit('UPDATE_VISITED_VIEW', view)
}
}
export default {
namespaced: true,
state,
mutations,
actions
}
================================================
FILE: src/main/frontend/styles/element-ui.scss
================================================
/*!
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
//to reset element-ui default css
.el-upload {
input[type="file"] {
display: none !important;
}
}
.el-upload__input {
display: none;
}
//暂时性解决diolag 问题 https://github.com/ElemeFE/element/issues/2461
.el-dialog {
transform: none;
left: 0;
position: relative;
margin: 0 auto;
}
//element ui upload
.upload-container {
.el-upload {
width: 100%;
.el-upload-dragger {
width: 100%;
height: 200px;
}
}
}
================================================
FILE: src/main/frontend/styles/index.scss
================================================
/*!
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
@import './variables.scss';
@import './mixin.scss';
@import './transition.scss';
@import './element-ui.scss';
@import './sidebar.scss';
body {
height: 100%;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
}
label {
font-weight: 700;
}
html {
height: 100%;
box-sizing: border-box;
}
#app{
height: 100%;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
a,
a:focus,
a:hover {
cursor: pointer;
color: inherit;
outline: none;
text-decoration: none;
}
div:focus{
outline: none;
}
a:focus,
a:active {
outline: none;
}
a,
a:focus,
a:hover {
cursor: pointer;
color: inherit;
text-decoration: none;
}
.clearfix {
&:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
}
//main-container全局样式
.app-main{
min-height: 100%
}
.app-container {
padding: 10px 0px 0px 10px;
}
================================================
FILE: src/main/frontend/styles/mixin.scss
================================================
/*!
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
@mixin clearfix {
&:after {
content: "";
display: table;
clear: both;
}
}
@mixin scrollBar {
&::-webkit-scrollbar-track-piece {
background: #d3dce6;
}
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-thumb {
background: #99a9bf;
border-radius: 20px;
}
}
@mixin relative {
position: relative;
width: 100%;
height: 100%;
}
================================================
FILE: src/main/frontend/styles/sidebar.scss
================================================
/*!
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#app {
// 主体区域
.main-container {
min-height: 100%;
transition: margin-left .28s;
margin-left: 180px;
position: relative;
}
// 侧边栏
.sidebar-container {
transition: width 0.28s;
width: 180px !important;
height: 100%;
position: fixed;
font-size: 0px;
top: 0;
bottom: 0;
left: 0;
z-index: 1001;
overflow: hidden;
//reset element-ui css
.horizontal-collapse-transition {
transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
}
.el-scrollbar__bar.is-vertical{
right: 0px;
}
.scrollbar-wrapper {
overflow-x: hidden!important;
.el-scrollbar__view {
height: 100%;
}
}
.is-horizontal {
display: none;
}
a {
display: inline-block;
width: 100%;
overflow: hidden;
}
.svg-icon {
margin-right: 16px;
}
.el-menu {
border: none;
height: 100%;
width: 100% !important;
}
.is-active > .el-submenu__title{
color: #f4f4f5!important;
}
&.has-logo {
.el-scrollbar {
height: calc(100% - 50px);
}
}
}
.hideSidebar {
.sidebar-container {
width: 36px !important;
}
.main-container {
margin-left: 36px;
}
.submenu-title-noDropdown {
padding-left: 10px !important;
position: relative;
.el-tooltip {
padding: 0 10px !important;
}
}
.el-submenu {
overflow: hidden;
&>.el-submenu__title {
padding-left: 10px !important;
.el-submenu__icon-arrow {
display: none;
}
}
}
.el-menu--collapse {
.el-submenu {
&>.el-submenu__title {
&>span {
height: 0;
width: 0;
overflow: hidden;
visibility: hidden;
display: inline-block;
}
}
}
}
}
.sidebar-container .nest-menu .el-submenu>.el-submenu__title,
.sidebar-container .el-submenu .el-menu-item {
min-width: 180px !important;
background-color: $subMenuBg !important;
&:hover {
background-color: $menuHover !important;
}
}
.el-menu--collapse .el-menu .el-submenu {
min-width: 180px !important;
}
//适配移动端
.mobile {
.main-container {
margin-left: 0px;
}
.sidebar-container {
transition: transform .28s;
width: 180px !important;
}
&.hideSidebar {
.sidebar-container {
transition-duration: 0.3s;
transform: translate3d(-180px, 0, 0);
}
}
}
.withoutAnimation {
.main-container,
.sidebar-container {
transition: none;
}
}
}
.el-menu--vertical{
& >.el-menu{
.svg-icon{
margin-right: 16px;
}
}
}
================================================
FILE: src/main/frontend/styles/transition.scss
================================================
/*!
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
//globl transition css
/*fade*/
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.28s;
}
.fade-enter,
.fade-leave-active {
opacity: 0;
}
/*fade-transform*/
.fade-transform-leave-active,
.fade-transform-enter-active {
transition: all .1s;
}
.fade-transform-enter {
opacity: 0;
transform: translateX(-30px);
}
.fade-transform-leave-to {
opacity: 0;
transform: translateX(30px);
}
/*fade*/
.breadcrumb-enter-active,
.breadcrumb-leave-active {
transition: all .5s;
}
.breadcrumb-enter,
.breadcrumb-leave-active {
opacity: 0;
transform: translateX(20px);
}
.breadcrumb-move {
transition: all .5s;
}
.breadcrumb-leave-active {
position: absolute;
}
================================================
FILE: src/main/frontend/styles/variables.scss
================================================
/*!
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
//sidebar
$menuBg:#304156;
$subMenuBg:#1f2d3d;
$menuHover:#001528;
================================================
FILE: src/main/frontend/utils/formatting.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import CodeMirror from 'codemirror';
(function() {
CodeMirror.extendMode("css", {
commentStart: "/*",
commentEnd: "*/",
newlineAfterToken: function(type, content) {
return /^[;{}]$/.test(content);
}
});
CodeMirror.extendMode("javascript", {
commentStart: "/*",
commentEnd: "*/",
// FIXME semicolons inside of for
newlineAfterToken: function(type, content, textAfter, state) {
if (this.jsonMode) {
return /^[\[,{]$/.test(content) || /^}/.test(textAfter);
} else {
if (content == ";" && state.lexical && state.lexical.type == ")") return false;
return /^[;{}]$/.test(content) && !/^;/.test(textAfter);
}
}
});
CodeMirror.extendMode("xml", {
commentStart: "<!--",
commentEnd: "-->",
newlineAfterToken: function(type, content, textAfter) {
return type == "tag" && />$/.test(content) || /^</.test(textAfter);
}
});
// Comment/uncomment the specified range
CodeMirror.defineExtension("commentRange", function (isComment, from, to) {
var cm = this, curMode = CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(from).state).mode;
cm.operation(function() {
if (isComment) { // Comment range
cm.replaceRange(curMode.commentEnd, to);
cm.replaceRange(curMode.commentStart, from);
if (from.line == to.line && from.ch == to.ch) // An empty comment inserted - put cursor inside
cm.setCursor(from.line, from.ch + curMode.commentStart.length);
} else { // Uncomment range
var selText = cm.getRange(from, to);
var startIndex = selText.indexOf(curMode.commentStart);
var endIndex = selText.lastIndexOf(curMode.commentEnd);
if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) {
// Take string till comment start
selText = selText.substr(0, startIndex)
// From comment start till comment end
+ selText.substring(startIndex + curMode.commentStart.length, endIndex)
// From comment end till string end
+ selText.substr(endIndex + curMode.commentEnd.length);
}
cm.replaceRange(selText, from, to);
}
});
});
// Applies automatic mode-aware indentation to the specified range
CodeMirror.defineExtension("autoIndentRange", function (from, to) {
var cmInstance = this;
this.operation(function () {
for (var i = from.line; i <= to.line; i++) {
cmInstance.indentLine(i, "smart");
}
});
});
// Applies automatic formatting to the specified range
CodeMirror.defineExtension("autoFormatRange", function (from, to,text) {
var cm = this;
var outer = cm.getMode();
text = text.split("\n");
var state = CodeMirror.copyState(outer, cm.getTokenAt(from).state);
var tabSize = cm.getOption("tabSize");
var out = "", lines = 0, atSol = from.ch == 0;
function newline() {
out += "\n";
atSol = true;
++lines;
}
for (var i = 0; i < text.length; ++i) {
var stream = new CodeMirror.StringStream(text[i], tabSize);
while (!stream.eol()) {
var inner = CodeMirror.innerMode(outer, state);
var style = outer.token(stream, state), cur = stream.current();
stream.start = stream.pos;
if (!atSol || /\S/.test(cur)) {
out += cur;
atSol = false;
}
if (!atSol && inner.mode.newlineAfterToken &&
inner.mode.newlineAfterToken(style, cur, stream.string.slice(stream.pos) || text[i+1] || "", inner.state))
newline();
}
if (!stream.pos && outer.blankLine) outer.blankLine(state);
if (!atSol) newline();
}
cm.operation(function () {
cm.replaceRange(out, from, to);
for (var cur = from.line + 1, end = from.line + lines; cur <= end; ++cur)
cm.indentLine(cur, "smart");
cm.setSelection(from, cm.getCursor(false));
});
});
})();
================================================
FILE: src/main/frontend/utils/get-page-title.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
const title = 'DUBBO-POSTMAN'
export default function getPageTitle(key) {
const hasKey = `${key}`
if (hasKey) {
const pageName = `${key}`
return `${pageName} - ${title}`
}
return `${title}`
}
================================================
FILE: src/main/frontend/utils/index.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
export function parseTime(time, cFormat) {
if (arguments.length === 0) {
return null
}
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if (('' + time).length === 10) time = parseInt(time) * 1000
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
export function formatTime(time, option) {
time = +time * 1000
const d = new Date(time)
const now = Date.now()
const diff = (now - d) / 1000
if (diff < 30) {
return '刚刚'
} else if (diff < 3600) {
// less 1 hour
return Math.ceil(diff / 60) + '分钟前'
} else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + '小时前'
} else if (diff < 3600 * 24 * 2) {
return '1天前'
}
if (option) {
return parseTime(time, option)
} else {
return (
d.getMonth() +
1 +
'月' +
d.getDate() +
'日' +
d.getHours() +
'时' +
d.getMinutes() +
'分'
)
}
}
export function isExternal(path) {
return /^(https?:|mailto:|tel:)/.test(path)
}
================================================
FILE: src/main/frontend/utils/request.js
================================================
/*
* MIT License
*
* Copyright (c) 2019 everythingbest
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
// 创建axios实例
const service = axios.create({
baseURL: process.env.BASE_API, // api 的 base_url
timeout: 1200*10*1000, // 请求超时时间10min
headers:{"ajax-type":true}
});
// response 拦截器
service.interceptors.response.use(
response => {
console.log(response.headers);
let session_timeout = response.headers["ajax-header"];
if (session_timeout) {
MessageBox.confirm(
'你已被登出,可以取消继续留在该页面,或者重新登录',
'确定登出',
{
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
window.location = "/logout";
}).catch(() => {
console.log("catch,session过期留在当前页面")
})
}else{
return response
}
},
error => {
console.log("错误类型:",typeof error);
console.log('服务错误:' + error);// for debug
Message({
message: error.toString(),
type: 'error',
duration: 5 * 1000
});
return Promise.reject(error)
}
)
export default service
================================================
FILE: src/main/frontend/views/error-page/401.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<div class="errPage-container">
<el-button icon="arrow-left" class="pan-back-btn" @click="back">
返回
</el-button>
<el-row>
<el-col :span="12">
<h1 class="text-jumbo text-ginormous">
Oops!
</h1>
<h2>你没有权限去该页面</h2>
<h6>......</h6>
<ul class="list-unstyled">
<li>或者你可以去:</li>
<li class="link-type">
<router-link to="/">
回首页
</router-link>
</li>
</ul>
</el-col>
<el-col :span="12">
<img :src="errGif" width="313" height="428" alt="Girl has dropped her ice cream.">
</el-col>
</el-row>
<el-dialog :visible.sync="dialogVisible" title="随便看">
<img :src="ewizardClap" class="pan-img">
</el-dialog>
</div>
</template>
<script>
import errGif from '@/assets/401_images/401.gif'
export default {
name: 'Page401',
data() {
return {
errGif: errGif + '?' + +new Date(),
ewizardClap: 'https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646',
dialogVisible: false
}
},
methods: {
back() {
if (this.$route.query.noGoBack) {
this.$router.push({ path: '/' })
} else {
this.$router.go(-1)
}
}
}
}
</script>
<style lang="scss" scoped>
.errPage-container {
width: 800px;
max-width: 100%;
margin: 100px auto;
.pan-back-btn {
background: #008489;
color: #fff;
border: none!important;
}
.pan-gif {
margin: 0 auto;
display: block;
}
.pan-img {
display: block;
margin: 0 auto;
width: 100%;
}
.text-jumbo {
font-size: 60px;
font-weight: 700;
color: #484848;
}
.list-unstyled {
font-size: 14px;
li {
padding-bottom: 5px;
}
a {
color: #008489;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}
}
</style>
================================================
FILE: src/main/frontend/views/error-page/404.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<div class="wscn-http404-container">
<div class="wscn-http404">
<div class="pic-404">
<img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404">
<img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404">
<img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404">
<img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404">
</div>
<div class="bullshit">
<div class="bullshit__oops">OOPS!</div>
<div class="bullshit__headline">{{ message }}</div>
<div class="bullshit__info">检查输入的页面URL是否正确,或者点击下面的按钮回到主页!.</div>
<a href="" class="bullshit__return-home">回到首页</a>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'Page404',
computed: {
message() {
return '页面不存在...'
}
}
}
</script>
<style lang="scss" scoped>
.wscn-http404-container{
transform: translate(-50%,-50%);
position: absolute;
top: 40%;
left: 50%;
}
.wscn-http404 {
position: relative;
width: 1200px;
padding: 0 50px;
overflow: hidden;
.pic-404 {
position: relative;
float: left;
width: 600px;
overflow: hidden;
&__parent {
width: 100%;
}
&__child {
position: absolute;
&.left {
width: 80px;
top: 17px;
left: 220px;
opacity: 0;
animation-name: cloudLeft;
animation-duration: 2s;
animation-timing-function: linear;
animation-fill-mode: forwards;
animation-delay: 1s;
}
&.mid {
width: 46px;
top: 10px;
left: 420px;
opacity: 0;
animation-name: cloudMid;
animation-duration: 2s;
animation-timing-function: linear;
animation-fill-mode: forwards;
animation-delay: 1.2s;
}
&.right {
width: 62px;
top: 100px;
left: 500px;
opacity: 0;
animation-name: cloudRight;
animation-duration: 2s;
animation-timing-function: linear;
animation-fill-mode: forwards;
animation-delay: 1s;
}
@keyframes cloudLeft {
0% {
top: 17px;
left: 220px;
opacity: 0;
}
20% {
top: 33px;
left: 188px;
opacity: 1;
}
80% {
top: 81px;
left: 92px;
opacity: 1;
}
100% {
top: 97px;
left: 60px;
opacity: 0;
}
}
@keyframes cloudMid {
0% {
top: 10px;
left: 420px;
opacity: 0;
}
20% {
top: 40px;
left: 360px;
opacity: 1;
}
70% {
top: 130px;
left: 180px;
opacity: 1;
}
100% {
top: 160px;
left: 120px;
opacity: 0;
}
}
@keyframes cloudRight {
0% {
top: 100px;
left: 500px;
opacity: 0;
}
20% {
top: 120px;
left: 460px;
opacity: 1;
}
80% {
top: 180px;
left: 340px;
opacity: 1;
}
100% {
top: 200px;
left: 300px;
opacity: 0;
}
}
}
}
.bullshit {
position: relative;
float: left;
width: 300px;
padding: 30px 0;
overflow: hidden;
&__oops {
font-size: 32px;
font-weight: bold;
line-height: 40px;
color: #1482f0;
opacity: 0;
margin-bottom: 20px;
animation-name: slideUp;
animation-duration: 0.5s;
animation-fill-mode: forwards;
}
&__headline {
font-size: 20px;
line-height: 24px;
color: #222;
font-weight: bold;
opacity: 0;
margin-bottom: 10px;
animation-name: slideUp;
animation-duration: 0.5s;
animation-delay: 0.1s;
animation-fill-mode: forwards;
}
&__info {
font-size: 13px;
line-height: 21px;
color: grey;
opacity: 0;
margin-bottom: 30px;
animation-name: slideUp;
animation-duration: 0.5s;
animation-delay: 0.2s;
animation-fill-mode: forwards;
}
&__return-home {
display: block;
float: left;
width: 110px;
height: 36px;
background: #1482f0;
border-radius: 100px;
text-align: center;
color: #ffffff;
opacity: 0;
font-size: 14px;
line-height: 36px;
cursor: pointer;
animation-name: slideUp;
animation-duration: 0.5s;
animation-delay: 0.3s;
animation-fill-mode: forwards;
}
@keyframes slideUp {
0% {
transform: translateY(60px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
}
}
</style>
================================================
FILE: src/main/frontend/views/layout/Layout.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<div :class="classObj" class="app-wrapper">
<div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside"/>
<sidebar class="sidebar-container"/>
<div class="main-container" id="my-real-body">
<navbar/>
<tags-view v-if="needTagsView" />
<app-main/>
</div>
</div>
</template>
<script>
import { Navbar, Sidebar, AppMain, TagsView } from './components'
import ResizeMixin from './mixin/ResizeHandler'
export default {
name: 'Layout',
components: {
Navbar,
Sidebar,
AppMain,
TagsView
},
mixins: [ResizeMixin],
computed: {
sidebar() {
return this.$store.state.app.sidebar
},
device() {
return this.$store.state.app.device
},
needTagsView() {
return this.$store.state.tagsView.visitedViews
},
classObj() {
return {
hideSidebar: !this.sidebar.opened,
openSidebar: this.sidebar.opened,
withoutAnimation: this.sidebar.withoutAnimation,
mobile: this.device === 'mobile'
}
}
},
methods: {
handleClickOutside() {
this.$store.dispatch('CloseSideBar', { withoutAnimation: false })
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
@import "src/main/frontend/styles/mixin.scss";
.app-wrapper {
@include clearfix;
position: relative;
height: 100%;
width: 100%;
&.mobile.openSidebar{
position: fixed;
top: 0;
}
}
.drawer-bg {
background: #000;
opacity: 0.3;
width: 100%;
top: 0;
height: 100%;
position: absolute;
z-index: 999;
}
</style>
================================================
FILE: src/main/frontend/views/layout/components/AppMain.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<section class="app-main">
<transition name="fade-transform" mode="out-in">
<keep-alive :include="cachedViews">
<router-view :key="key" />
</keep-alive>
</transition>
</section>
</template>
<script>
export default {
name: 'AppMain',
computed: {
cachedViews() {
return this.$store.state.tagsView.cachedViews
},
key() {
return this.$route.fullPath
}
}
}
</script>
<style lang="scss" scoped>
.app-main {
/* 50= navbar 50 */
min-height: calc(100vh - 50px);
width: 100%;
position: relative;
overflow: hidden;
}
.fixed-header+.app-main {
padding-top: 50px;
}
.hasTagsView {
.app-main {
/* 84 = navbar + tags-view = 50 + 34 */
min-height: calc(100vh - 84px);
}
.fixed-header+.app-main {
padding-top: 84px;
}
}
</style>
================================================
FILE: src/main/frontend/views/layout/components/Navbar.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<el-menu class="navbar" mode="horizontal">
<hamburger :toggle-click="toggleSideBar" :is-active="sidebar.opened" class="hamburger-container"/>
<breadcrumb class="breadcrumb-container"/>
<div class="right-menu">
<div
class="self-menu"
@click="clearPageCache">
<a>清空本地存储</a>
</div>
<el-dropdown trigger="hover" class="right-menu-item hover-effect" @command="handleSelectEnvironment">
<div class="self-menu">
<svg-icon icon-class="tree" />
<a>环境切换-{{sysEnv}}</a>
<i class="el-icon-caret-bottom"/>
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item class="self-menu-item" command="http://dubbo-postman-dev.com">开发环境</el-dropdown-item>
<el-dropdown-item class="self-menu-item" command="http://dubbo-postman-qa1.com">QA1环境</el-dropdown-item>
<el-dropdown-item class="self-menu-item" command="http://dubbo-postman-qa3.com">QA3环境</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<img src="@/assets/logo.png" class="user-avatar">
<i class="el-icon-caret-bottom"/>
</div>
<el-dropdown-menu slot="dropdown" class="user-dropdown">
<router-link class="inlineBlock" to="/access/index">
<el-dropdown-item>
首页
</el-dropdown-item>
</router-link>
<el-dropdown-item divided>
<span style="display:block;" @click="logout">退出</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</el-menu>
</template>
<script>
import { mapGetters } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import Hamburger from '@/components/Hamburger'
import { getEnv} from '@/api/common';
export default {
data() {
return {
sysEnv:'DEV',
}
},
components: {
Breadcrumb,
Hamburger,
},
computed: {
...mapGetters([
'sidebar',
'avatar'
])
},
methods: {
clearPageCache(){
window.localStorage.clear();
window.location.reload();
},
getSysEnv(){
let param = {};
getEnv(param).then((res) => {
this.sysEnv = res.data.data;
});
},
logout() {
/*this.$store.dispatch('LogOut').then(() => {
location.reload() // 为了重新实例化vue-router对象 避免bug
});*/
window.location = "/logout";
},
toggleSideBar() {
this.$store.dispatch('ToggleSideBar')
},
handleSelectEnvironment(lang) {
console.log("连接:",lang);
window.open(lang, '_blank', );
},
logout() {
window.location = "/logout";
}
},
mounted() {
this.getSysEnv();
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.navbar {
@import "src/main/frontend/styles/variables.scss";
height: 50px;
line-height: 50px;
border-radius: 0px !important;
.hamburger-container {
line-height: 58px;
height: 50px;
float: left;
padding: 0 10px;
}
.avatar-container {
margin-right: 30px;
.avatar-wrapper {
margin-top: 5px;
position: relative;
.user-avatar {
cursor: pointer;
width: 40px;
height: 40px;
border-radius: 10px;
}
.el-icon-caret-bottom {
cursor: pointer;
position: absolute;
right: -20px;
top: 25px;
font-size: 12px;
}
}
}
.right-menu {
float: right;
height: 100%;
line-height: 50px;
&:focus {
outline: none;
}
.right-menu-item {
display: inline-block;
padding: 0 8px;
height: 100%;
font-size: 18px;
color: #5a5e66;
vertical-align: text-bottom;
&.hover-effect {
cursor: pointer;
transition: background .3s;
&:hover {
background: rgba(0, 0, 0, .025)
}
}
}
.avatar-container {
margin-right: 30px;
.avatar-wrapper {
margin-top: 5px;
position: relative;
.user-avatar {
cursor: pointer;
width: 40px;
height: 40px;
border-radius: 10px;
}
.el-icon-caret-bottom {
cursor: pointer;
position: absolute;
right: -20px;
top: 25px;
font-size: 12px;
}
}
}
}
}
.self-menu{
@import "src/main/frontend/styles/variables.scss";
/*min-width: 180px !important;*/
float: left;
display: inline-block;
padding: 0 8px;
height: 100%;
color: #495060;
background: #fff;
vertical-align: middle;
&:hover {
background-color: #42b983;
color: #fff;
}
font-size: 18px;
}
.self-menu-item{
@import "src/main/frontend/styles/variables.scss";
/*min-width: 180px !important;*/
padding: 0 8px;
height: 100%;
color: #495060;
background: #fff;
vertical-align: middle;
&:hover {
background-color: #42b983;
color: #fff;
}
font-size: 16px;
}
</style>
================================================
FILE: src/main/frontend/views/layout/components/Sidebar/Item.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<script>
export default {
name: 'MenuItem',
functional: true,
props: {
icon: {
type: String,
default: ''
},
title: {
type: String,
default: ''
}
},
render(h, context) {
const { icon, title } = context.props
const vnodes = []
if (icon) {
vnodes.push(<svg-icon icon-class={icon}/>)
}
if (title) {
vnodes.push(<span slot='title'>{(title)}</span>)
}
return vnodes
}
}
</script>
================================================
FILE: src/main/frontend/views/layout/components/Sidebar/Link.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<!-- eslint-disable vue/require-component-is-->
<component v-bind="linkProps(to)">
<slot/>
</component>
</template>
<script>
import { isExternal } from '@/utils'
export default {
props: {
to: {
type: String,
required: true
}
},
methods: {
isExternalLink(routePath) {
return isExternal(routePath)
},
linkProps(url) {
if (this.isExternalLink(url)) {
return {
is: 'a',
href: url,
target: '_blank',
rel: 'noopener'
}
}
return {
is: 'router-link',
to: url
}
}
}
}
</script>
================================================
FILE: src/main/frontend/views/layout/components/Sidebar/Logo.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<div class="sidebar-logo-container" :class="{'collapse':collapse}">
<transition name="sidebarLogoFade">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
<img v-if="logo" src="@/assets/logo.png" class="sidebar-logo">
<h1 v-else class="sidebar-title">{{ title }} </h1>
</router-link>
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
<img v-if="logo" src="@/assets/logo.png" class="sidebar-logo">
<h1 class="sidebar-title">{{ title }} </h1>
</router-link>
</transition>
</div>
</template>
<script>
export default {
name: 'SidebarLogo',
props: {
collapse: {
type: Boolean,
required: true
}
},
data() {
return {
title: 'RPC-POSTMAN',
logo: '@/assets/logo.png'
}
}
}
</script>
<style lang="scss" scoped>
.sidebarLogoFade-enter-active {
transition: opacity 1.5s;
}
.sidebarLogoFade-enter,
.sidebarLogoFade-leave-to {
opacity: 0;
}
.sidebar-logo-container {
position: relative;
width: 100%;
height: 50px;
line-height: 50px;
background: #2b2f3a;
text-align: center;
overflow: hidden;
& .sidebar-logo-link {
height: 100%;
width: 100%;
& .sidebar-logo {
width: 32px;
height: 32px;
vertical-align: middle;
margin-right: 12px;
}
& .sidebar-title {
display: inline-block;
margin: 0;
color: #fff;
font-weight: 600;
line-height: 50px;
font-size: 14px;
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
vertical-align: middle;
}
}
&.collapse {
.sidebar-logo {
margin-right: 0px;
}
}
}
</style>
================================================
FILE: src/main/frontend/views/layout/components/Sidebar/SidebarItem.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-->
<template>
<div v-if="!item.hidden&&item.children" class="menu-wrapper">
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<app-link :to="resolvePath(onlyOneChild.path)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<item v-if="onlyOneChild.meta" :icon="onlyOneChild.meta.icon||item.meta.icon" :title="onlyOneChild.meta.title" />
</el-menu-item>
</app-link>
</template>
<el-submenu v-else :index="resolvePath(item.path)">
<template slot="title">
<item v-if="item.meta" :icon="item.meta.icon" :title="item.meta.title" />
</template>
<template v-for="child in item.children" v-if="!child.hidden">
<sidebar-item
v-if="child.children&&child.children.length>0"
:is-nest="true"
:item="child"
:key="child.path"
:base-path="resolvePath(child.path)"
class="nest-menu" />
<app-link v-else :to="resolvePath(child.path)" :key="child.name">
<el-menu-item :index="resolvePath(child.path)">
<item v-if="child.meta" :icon="child.meta.icon" :title="child.meta.title" />
</el-menu-item>
</app-link>
</template>
</el-submenu>
</div>
</template>
<script>
import path from 'path'
import { isExternal } from '@/utils'
import Item from './Item'
import AppLink from './Link'
export default {
name: 'SidebarItem',
components: { Item, AppLink },
props: {
// route object
item: {
type: Object,
required: true
},
isNest: {
type: Boolean,
default: false
},
basePath: {
type: String,
default: ''
}
},
data() {
return {
onlyOneChild: null
}
},
methods: {
hasOneShowingChild(children, parent) {
const showingChildren = children.filter(item => {
if (item.hidden) {
return false
} else {
// Temp set(will be used if only has one showing child)
this.onlyOneChild = item
return true
}
})
// When there is only one child router, the child router is displayed by default
if (showingChildren.length === 1) {
return true
}
// Show parent if there are no child router to display
if (showingChildren.length === 0) {
this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
return true
}
return false
},
resolvePath(routePath) {
if (this.isExternalLink(routePath)) {
return routePath
}
return path.resolve(this.basePath, routePath)
},
isExternalLink(routePath) {
return isExternal(routePath)
}
}
}
</script>
================================================
FILE: src/main/frontend/views/layout/components/Sidebar/index.vue
================================================
<!--
- MIT License
-
- Copyright (c) 2019 everythingbest
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
gitextract_z_1p29g2/
├── .babelrc
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .postcssrc.js
├── LICENSE
├── README.MD
├── build/
│ ├── build.js
│ ├── check-versions.js
│ ├── dev-client.js
│ ├── dev-server.js
│ ├── utils.js
│ ├── vue-loader.conf.js
│ ├── webpack.base.conf.js
│ ├── webpack.dev.conf.js
│ └── webpack.prod.conf.js
├── config/
│ ├── dev.env.js
│ ├── index.js
│ └── prod.env.js
├── doc/
│ ├── boot-activity.puml
│ ├── component.puml
│ ├── create-activity.puml
│ ├── projectStructure
│ ├── request-activity.puml
│ ├── rpc-postman.uml
│ └── usecase.puml
├── index.html
├── package.json
├── pom.xml
└── src/
├── main/
│ ├── frontend/
│ │ ├── App.vue
│ │ ├── api/
│ │ │ ├── access.js
│ │ │ ├── associationCase.js
│ │ │ ├── caseRun.js
│ │ │ ├── common.js
│ │ │ ├── config.js
│ │ │ ├── create.js
│ │ │ └── testCase.js
│ │ ├── components/
│ │ │ ├── BackToTop/
│ │ │ │ └── index.vue
│ │ │ ├── Breadcrumb/
│ │ │ │ └── index.vue
│ │ │ ├── GithubCorner/
│ │ │ │ └── index.vue
│ │ │ ├── Hamburger/
│ │ │ │ └── index.vue
│ │ │ ├── ScrollPane/
│ │ │ │ └── index.vue
│ │ │ └── SvgIcon/
│ │ │ └── index.vue
│ │ ├── icons/
│ │ │ ├── index.js
│ │ │ └── svgo.yml
│ │ ├── main.js
│ │ ├── mock/
│ │ │ ├── access.js
│ │ │ ├── associationCase.js
│ │ │ ├── caseRun.js
│ │ │ ├── common.js
│ │ │ ├── config.js
│ │ │ ├── create.js
│ │ │ ├── index.js
│ │ │ └── testCase.js
│ │ ├── router/
│ │ │ └── index.js
│ │ ├── store/
│ │ │ ├── getters.js
│ │ │ ├── index.js
│ │ │ └── modules/
│ │ │ ├── app.js
│ │ │ └── tagsView.js
│ │ ├── styles/
│ │ │ ├── element-ui.scss
│ │ │ ├── index.scss
│ │ │ ├── mixin.scss
│ │ │ ├── sidebar.scss
│ │ │ ├── transition.scss
│ │ │ └── variables.scss
│ │ ├── utils/
│ │ │ ├── formatting.js
│ │ │ ├── get-page-title.js
│ │ │ ├── index.js
│ │ │ └── request.js
│ │ └── views/
│ │ ├── error-page/
│ │ │ ├── 401.vue
│ │ │ └── 404.vue
│ │ ├── layout/
│ │ │ ├── Layout.vue
│ │ │ ├── components/
│ │ │ │ ├── AppMain.vue
│ │ │ │ ├── Navbar.vue
│ │ │ │ ├── Sidebar/
│ │ │ │ │ ├── Item.vue
│ │ │ │ │ ├── Link.vue
│ │ │ │ │ ├── Logo.vue
│ │ │ │ │ ├── SidebarItem.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── TagsView.vue
│ │ │ │ └── index.js
│ │ │ └── mixin/
│ │ │ └── ResizeHandler.js
│ │ ├── pages/
│ │ │ ├── AccessService.vue
│ │ │ ├── CaseManage.vue
│ │ │ ├── CreateService.vue
│ │ │ └── SystemConfig.vue
│ │ └── redirect/
│ │ └── index.vue
│ ├── java/
│ │ └── com/
│ │ └── rpcpostman/
│ │ ├── Main.java
│ │ ├── config/
│ │ │ ├── AppConfig.java
│ │ │ ├── Initializer.java
│ │ │ ├── RedisConfig.java
│ │ │ ├── SessionExpireEntryPoint.java
│ │ │ └── WebSecurityConfig.java
│ │ ├── controller/
│ │ │ ├── AbstractController.java
│ │ │ ├── RpcPostmanClusterController.java
│ │ │ ├── RpcPostmanHomeController.java
│ │ │ ├── RpcPostmanProxyController.java
│ │ │ ├── RpcPostmanSceneTestController.java
│ │ │ ├── RpcPostmanSceneTestRunnerController.java
│ │ │ ├── RpcPostmanServiceCreationController.java
│ │ │ ├── RpcPostmanServiceQueryController.java
│ │ │ └── RpcPostmanTestCaseController.java
│ │ ├── dto/
│ │ │ ├── AbstractCaseDto.java
│ │ │ ├── SceneCaseDto.java
│ │ │ ├── UserCaseDto.java
│ │ │ ├── UserCaseGroupDto.java
│ │ │ └── WebApiRspDto.java
│ │ ├── security/
│ │ │ ├── UserDetails.java
│ │ │ ├── UserDetailsService.java
│ │ │ ├── entity/
│ │ │ │ ├── RoleType.java
│ │ │ │ └── User.java
│ │ │ └── user/
│ │ │ ├── UserService.java
│ │ │ └── impl/
│ │ │ └── UserServiceImpl.java
│ │ ├── service/
│ │ │ ├── GAV.java
│ │ │ ├── Pair.java
│ │ │ ├── context/
│ │ │ │ └── InvokeContext.java
│ │ │ ├── creation/
│ │ │ │ ├── Creator.java
│ │ │ │ ├── entity/
│ │ │ │ │ ├── DubboPostmanService.java
│ │ │ │ │ ├── GrpcPostmanService.java
│ │ │ │ │ ├── InterfaceEntity.java
│ │ │ │ │ ├── MethodEntity.java
│ │ │ │ │ ├── ParamEntity.java
│ │ │ │ │ ├── PostmanService.java
│ │ │ │ │ └── RequestParam.java
│ │ │ │ └── impl/
│ │ │ │ ├── DubboCreator.java
│ │ │ │ └── GrpcCreator.java
│ │ │ ├── invocation/
│ │ │ │ ├── Converter.java
│ │ │ │ ├── Invocation.java
│ │ │ │ ├── Invoker.java
│ │ │ │ ├── ResponseCode.java
│ │ │ │ ├── entity/
│ │ │ │ │ ├── DubboInvocation.java
│ │ │ │ │ ├── DubboParamValue.java
│ │ │ │ │ ├── PostmanDubboRequest.java
│ │ │ │ │ ├── PostmanRequest.java
│ │ │ │ │ └── RpcParamValue.java
│ │ │ │ ├── exception/
│ │ │ │ │ └── ParamException.java
│ │ │ │ └── impl/
│ │ │ │ ├── DubboConverter.java
│ │ │ │ ├── DubboInvoker.java
│ │ │ │ └── GrpcInvoker.java
│ │ │ ├── load/
│ │ │ │ ├── Loader.java
│ │ │ │ ├── classloader/
│ │ │ │ │ └── ApiJarClassLoader.java
│ │ │ │ └── impl/
│ │ │ │ ├── JarLocalFileLoader.java
│ │ │ │ └── JarUrlFileLoader.java
│ │ │ ├── maven/
│ │ │ │ └── Maven.java
│ │ │ ├── registry/
│ │ │ │ ├── Register.java
│ │ │ │ ├── RegisterFactory.java
│ │ │ │ ├── entity/
│ │ │ │ │ └── InterfaceMetaInfo.java
│ │ │ │ └── impl/
│ │ │ │ ├── AbstractRegisterFactory.java
│ │ │ │ ├── DubboRegisterFactory.java
│ │ │ │ ├── RedisRegister.java
│ │ │ │ └── ZkRegister.java
│ │ │ ├── repository/
│ │ │ │ ├── Repository.java
│ │ │ │ └── redis/
│ │ │ │ ├── RedisKeys.java
│ │ │ │ └── RedisRepository.java
│ │ │ └── scenetest/
│ │ │ ├── JSEngine.java
│ │ │ └── SceneTester.java
│ │ └── util/
│ │ ├── BuildUtil.java
│ │ ├── Constant.java
│ │ ├── ExceptionHelper.java
│ │ ├── FileWithString.java
│ │ ├── JSON.java
│ │ ├── LogResultPrintStream.java
│ │ └── XmlUtil.java
│ └── resources/
│ ├── application.properties
│ ├── config/
│ │ └── setting.xml
│ ├── logback.xml
│ ├── public/
│ │ ├── index.html
│ │ └── static/
│ │ ├── css/
│ │ │ ├── app.c775b29c.css
│ │ │ ├── chunk-21b7.d9ef3e45.css
│ │ │ ├── chunk-4c13.f6ea9576.css
│ │ │ ├── chunk-elementUI.bb0f370d.css
│ │ │ └── chunk-libs.2c094f17.css
│ │ └── js/
│ │ ├── app.713c0695.js
│ │ ├── chunk-21b7.2f464e06.js
│ │ ├── chunk-4c13.9e346bf2.js
│ │ ├── chunk-elementUI.753a79b5.js
│ │ ├── chunk-libs.b46743d1.js
│ │ └── cs1M.3da5a21a.js
│ └── script/
│ ├── propertyOperation.js
│ └── sendWrapper.js
└── test/
└── java/
└── com/
└── rpcpostman/
├── service/
│ ├── appfind/
│ │ └── zk/
│ │ └── ZkServiceTest.java
│ └── maven/
│ └── MavenProcessorTest.java
└── util/
└── XmlUtilTest.java
SYMBOL INDEX (1377 symbols across 102 files)
FILE: build/check-versions.js
function exec (line 31) | function exec(cmd) {
FILE: build/utils.js
function generateLoaders (line 58) | function generateLoaders(loader, loaderOptions) {
FILE: build/webpack.base.conf.js
function resolve (line 32) | function resolve(dir) {
FILE: build/webpack.dev.conf.js
function resolve (line 36) | function resolve(dir) {
constant HOST (line 40) | const HOST = process.env.HOST
constant PORT (line 41) | const PORT = process.env.PORT && Number(process.env.PORT)
FILE: build/webpack.prod.conf.js
function resolve (line 39) | function resolve(dir) {
FILE: src/main/frontend/api/access.js
function getRegisterService (line 27) | function getRegisterService(params) {
function getAllMethods (line 35) | function getAllMethods(params) {
function getArgs (line 43) | function getArgs(params) {
function getAllProviders (line 51) | function getAllProviders(params) {
function getTemplate (line 59) | function getTemplate(params) {
function getRemoteHistoryTemplate (line 67) | function getRemoteHistoryTemplate(params) {
function getRemoteAssignedTemplate (line 75) | function getRemoteAssignedTemplate(params) {
function doRequest (line 83) | function doRequest(params) {
function saveHisTemplate (line 91) | function saveHisTemplate(params) {
FILE: src/main/frontend/api/associationCase.js
function saveAssociationCase (line 27) | function saveAssociationCase(data) {
function deleteAssociationCase (line 36) | function deleteAssociationCase(params) {
function getAllAssociationName (line 45) | function getAllAssociationName(params) {
function getAssociationCase (line 54) | function getAssociationCase(params) {
FILE: src/main/frontend/api/caseRun.js
function batchCaseRun (line 27) | function batchCaseRun(data) {
FILE: src/main/frontend/api/common.js
function getAllZk (line 27) | function getAllZk(params) {
function getEnv (line 36) | function getEnv(params) {
FILE: src/main/frontend/api/config.js
function addConfig (line 27) | function addConfig(params) {
function deleteZk (line 35) | function deleteZk(params) {
function configs (line 43) | function configs(params) {
FILE: src/main/frontend/api/create.js
function getZkServices (line 27) | function getZkServices(params) {
function upload (line 35) | function upload(params) {
function refresh (line 43) | function refresh(params) {
FILE: src/main/frontend/api/testCase.js
function saveCase (line 27) | function saveCase(data) {
function getGroupAndCaseName (line 36) | function getGroupAndCaseName(params) {
function getAllGroupName (line 44) | function getAllGroupName(params) {
function queryCaseDetail (line 52) | function queryCaseDetail(params) {
function deleteDetail (line 60) | function deleteDetail(params) {
function queryAllCaseDetail (line 68) | function queryAllCaseDetail(params) {
FILE: src/main/frontend/store/modules/app.js
method CloseSideBar (line 58) | CloseSideBar({ commit }, { withoutAnimation }) {
method ToggleDevice (line 61) | ToggleDevice({ commit }, device) {
FILE: src/main/frontend/store/modules/tagsView.js
method addView (line 99) | addView({ dispatch }, view) {
method addVisitedView (line 103) | addVisitedView({ commit }, view) {
method addCachedView (line 106) | addCachedView({ commit }, view) {
method delView (line 110) | delView({ dispatch, state }, view) {
method delVisitedView (line 120) | delVisitedView({ commit, state }, view) {
method delCachedView (line 126) | delCachedView({ commit, state }, view) {
method delOthersViews (line 133) | delOthersViews({ dispatch, state }, view) {
method delOthersVisitedViews (line 143) | delOthersVisitedViews({ commit, state }, view) {
method delOthersCachedViews (line 149) | delOthersCachedViews({ commit, state }, view) {
method delAllViews (line 156) | delAllViews({ dispatch, state }, view) {
method delAllVisitedViews (line 166) | delAllVisitedViews({ commit, state }) {
method delAllCachedViews (line 172) | delAllCachedViews({ commit, state }) {
method updateVisitedView (line 179) | updateVisitedView({ commit }, view) {
FILE: src/main/frontend/utils/formatting.js
function newline (line 102) | function newline() {
FILE: src/main/frontend/utils/get-page-title.js
function getPageTitle (line 27) | function getPageTitle(key) {
FILE: src/main/frontend/utils/index.js
function parseTime (line 26) | function parseTime(time, cFormat) {
function formatTime (line 59) | function formatTime(time, option) {
function isExternal (line 93) | function isExternal(path) {
FILE: src/main/frontend/views/layout/mixin/ResizeHandler.js
constant WIDTH (line 28) | const WIDTH = 1024
constant RATIO (line 29) | const RATIO = 3
method $route (line 33) | $route(route) {
method beforeMount (line 39) | beforeMount() {
method mounted (line 42) | mounted() {
method isMobile (line 50) | isMobile() {
method resizeHandler (line 54) | resizeHandler() {
FILE: src/main/java/com/rpcpostman/Main.java
class Main (line 38) | @SpringBootApplication(exclude = org.springframework.boot.autoconfigure....
method main (line 43) | public static void main(String[] args) {
FILE: src/main/java/com/rpcpostman/config/AppConfig.java
class AppConfig (line 40) | @Configuration
method mavenProcessor (line 52) | @Bean
method initializer (line 58) | @Bean
FILE: src/main/java/com/rpcpostman/config/Initializer.java
class Initializer (line 56) | public class Initializer {
method loadCreatedService (line 60) | public void loadCreatedService(RedisRepository redisRepository,
method copySettingXml (line 79) | void copySettingXml(String userHomePath) throws Exception {
method changLocalRepository (line 106) | void changLocalRepository(String newPath) throws Exception{
method loadZkAddress (line 162) | void loadZkAddress(RedisRepository redisRepository){
FILE: src/main/java/com/rpcpostman/config/RedisConfig.java
class RedisConfig (line 40) | @Configuration
method jedisConnectionFactory (line 58) | @Bean
method redisTemplate (line 84) | @Bean
FILE: src/main/java/com/rpcpostman/config/SessionExpireEntryPoint.java
class SessionExpireEntryPoint (line 44) | public class SessionExpireEntryPoint implements AuthenticationEntryPoint {
method SessionExpireEntryPoint (line 52) | SessionExpireEntryPoint(final CasAuthenticationEntryPoint casAuthentic...
method commence (line 65) | @Override
FILE: src/main/java/com/rpcpostman/config/WebSecurityConfig.java
class WebSecurityConfig (line 50) | public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
method configure (line 69) | @Override
method configure (line 83) | @Override
method getCasAuthenticationEntryPoint (line 91) | public SessionExpireEntryPoint getCasAuthenticationEntryPoint() {
method casAuthenticationFilter (line 102) | public CasAuthenticationFilter casAuthenticationFilter() throws Except...
method logoutFilter (line 109) | public LogoutFilter logoutFilter() {
method casAuthenticationProvider (line 115) | public CasAuthenticationProvider casAuthenticationProvider() {
method serviceProperties (line 124) | private ServiceProperties serviceProperties() {
method userDetailsByNameServiceWrapper (line 134) | private UserDetailsByNameServiceWrapper userDetailsByNameServiceWrappe...
method cas20ServiceTicketValidator (line 140) | private Cas20ServiceTicketValidator cas20ServiceTicketValidator() {
FILE: src/main/java/com/rpcpostman/controller/AbstractController.java
class AbstractController (line 44) | @Service
method getAllSimpleClassName (line 50) | Map<String,String> getAllSimpleClassName(String zk, String serviceName){
FILE: src/main/java/com/rpcpostman/controller/RpcPostmanClusterController.java
class RpcPostmanClusterController (line 46) | @Controller
method configs (line 56) | @RequestMapping(value = "configs", method = RequestMethod.GET)
method allZk (line 65) | @RequestMapping(value = "all-zk", method = RequestMethod.GET)
method queryDubbo (line 78) | @RequestMapping(value = "new/config", method = RequestMethod.GET)
method del (line 109) | @RequestMapping(value = "zk/del", method = RequestMethod.GET)
method env (line 134) | @RequestMapping(value = "env", method = RequestMethod.GET)
FILE: src/main/java/com/rpcpostman/controller/RpcPostmanHomeController.java
class RpcPostmanHomeController (line 34) | @Controller
method index (line 37) | @RequestMapping(value = "/")
FILE: src/main/java/com/rpcpostman/controller/RpcPostmanProxyController.java
class RpcPostmanProxyController (line 47) | @Controller
method query (line 55) | @RequestMapping(value = "/dubbo", method = RequestMethod.GET)
FILE: src/main/java/com/rpcpostman/controller/RpcPostmanSceneTestController.java
class RpcPostmanSceneTestController (line 49) | @Controller
method saveSceneCase (line 58) | @RequestMapping(value = "case/scene/save", method = RequestMethod.POST)
method deleteSceneCase (line 76) | @RequestMapping(value = "case/scene/delete", method = RequestMethod.GET)
method getSceneCase (line 90) | @RequestMapping(value = "case/scene/get", method = RequestMethod.GET)
method getAllSceneName (line 121) | @RequestMapping(value = "case/scene-name/list", method = RequestMethod...
FILE: src/main/java/com/rpcpostman/controller/RpcPostmanSceneTestRunnerController.java
class RpcPostmanSceneTestRunnerController (line 53) | @Controller
method runSceneCase (line 65) | @ResponseBody
FILE: src/main/java/com/rpcpostman/controller/RpcPostmanServiceCreationController.java
class RpcPostmanServiceCreationController (line 50) | @Controller
method getAppNames (line 64) | @RequestMapping(value = "result/appNames",method = {RequestMethod.GET})
method createService (line 75) | @RequestMapping(value = "create",method = RequestMethod.GET)
method refreshService (line 111) | @RequestMapping(value = "refresh",method = RequestMethod.GET)
FILE: src/main/java/com/rpcpostman/controller/RpcPostmanServiceQueryController.java
class RpcPostmanServiceQueryController (line 53) | @Controller
method getCreatedServiceName (line 65) | @RequestMapping(value = "result/serviceNames",method = {RequestMethod....
method getInterfaces (line 80) | @RequestMapping(value = "result/interface",method = {RequestMethod.GET})
method getResultServiceMethod (line 114) | @RequestMapping(value = "result/interface/method/param",method = {Requ...
method setParams (line 162) | void setParams(ParamEntity paramModel, ApiJarClassLoader classLoader, ...
method getInterfaces (line 201) | @RequestMapping(value = "result/interfaceNames",method = {RequestMetho...
method isPrimitive (line 217) | private boolean isPrimitive(String typeName){
FILE: src/main/java/com/rpcpostman/controller/RpcPostmanTestCaseController.java
class RpcPostmanTestCaseController (line 46) | @Controller
method saveCase (line 55) | @RequestMapping(value = "case/save", method = RequestMethod.POST)
method getAllGroupCaseDetail (line 77) | @RequestMapping(value = "case/group-case-detail/list", method = Reques...
method getAllGroupAndCaseName (line 105) | @RequestMapping(value = "case/group/list", method = RequestMethod.GET)
method getAllGroupName (line 145) | @RequestMapping(value = "case/group-name/list", method = RequestMethod...
method queryCaseDetail (line 172) | @RequestMapping(value = "case/detail", method = RequestMethod.GET)
method deleteDetail (line 202) | @RequestMapping(value = "case/delete", method = RequestMethod.GET)
FILE: src/main/java/com/rpcpostman/dto/AbstractCaseDto.java
class AbstractCaseDto (line 33) | @Data
FILE: src/main/java/com/rpcpostman/dto/SceneCaseDto.java
class SceneCaseDto (line 36) | @Data
FILE: src/main/java/com/rpcpostman/dto/UserCaseDto.java
class UserCaseDto (line 33) | @Data
FILE: src/main/java/com/rpcpostman/dto/UserCaseGroupDto.java
class UserCaseGroupDto (line 36) | @Data
FILE: src/main/java/com/rpcpostman/dto/WebApiRspDto.java
class WebApiRspDto (line 36) | public class WebApiRspDto<T>{
method success (line 56) | public static <T> WebApiRspDto<T> success(T data) {
method success (line 63) | public static <T> WebApiRspDto<T> success(T data, long elapse) {
method error (line 71) | public static <T> WebApiRspDto<T> error(String errorMessage) {
method error (line 75) | public static <T> WebApiRspDto<T> error(String errorMessage, int error...
method error (line 79) | public static <T> WebApiRspDto<T> error(String errorMessage, Boolean i...
method error (line 83) | public static <T> WebApiRspDto<T> error(String errorMessage, int error...
method asProcess (line 91) | public static <T> WebApiRspDto<T> asProcess(WebApiRspDto.Procedure<T> ...
method asProcess (line 95) | public static <T> WebApiRspDto<T> asProcess(WebApiRspDto.Procedure<T> ...
method getCode (line 105) | public int getCode() {
method setCode (line 109) | public void setCode(int code) {
method getError (line 113) | public String getError() {
method setError (line 117) | public void setError(String error) {
method getData (line 121) | public T getData() {
method setData (line 125) | public void setData(T data) {
method getNeedRetry (line 129) | public Boolean getNeedRetry() {
method setNeedRetry (line 133) | public void setNeedRetry(Boolean needRetry) {
method getElapse (line 137) | public long getElapse() {
method setElapse (line 141) | public void setElapse(long elapse) {
method equals (line 145) | @Override
method hashCode (line 158) | @Override
method toString (line 166) | @Override
type Procedure (line 176) | @FunctionalInterface
method apply (line 178) | T apply() throws Exception;
FILE: src/main/java/com/rpcpostman/security/UserDetails.java
class UserDetails (line 37) | public class UserDetails extends User implements
method UserDetails (line 46) | public UserDetails(User user) {
method getAuthorities (line 59) | @Override
method getPassword (line 65) | @Override
method getUsername (line 70) | @Override
method isAccountNonExpired (line 76) | @Override
method isAccountNonLocked (line 81) | @Override
method isCredentialsNonExpired (line 86) | @Override
method isEnabled (line 91) | @Override
FILE: src/main/java/com/rpcpostman/security/UserDetailsService.java
class UserDetailsService (line 39) | @Component
method loadUserByUsername (line 46) | @Override
FILE: src/main/java/com/rpcpostman/security/entity/RoleType.java
type RoleType (line 30) | public enum RoleType {
method compare (line 35) | public static boolean compare(RoleType ori,RoleType tar){
FILE: src/main/java/com/rpcpostman/security/entity/User.java
class User (line 35) | @Data
method of (line 42) | public static User of(String userCode) {
method User (line 51) | public User() {
method User (line 55) | public User(User user) {
FILE: src/main/java/com/rpcpostman/security/user/UserService.java
type UserService (line 35) | public interface UserService {
method list (line 37) | List<User> list();
method saveNewUser (line 39) | boolean saveNewUser(User user);
method findOrAdd (line 41) | User findOrAdd(String userCode);
method update (line 43) | boolean update(User user);
method delete (line 45) | boolean delete(String userCode);
FILE: src/main/java/com/rpcpostman/security/user/impl/UserServiceImpl.java
class UserServiceImpl (line 43) | @Service
method list (line 51) | @Override
method saveNewUser (line 72) | @Override
method findOrAdd (line 82) | @Override
method update (line 115) | @Override
method delete (line 125) | @Override
FILE: src/main/java/com/rpcpostman/service/GAV.java
class GAV (line 32) | @Data
FILE: src/main/java/com/rpcpostman/service/Pair.java
class Pair (line 30) | public class Pair<L,R> {
method Pair (line 35) | public Pair(L left, R right){
method getLeft (line 40) | public L getLeft() {
method getRight (line 44) | public R getRight() {
FILE: src/main/java/com/rpcpostman/service/context/InvokeContext.java
class InvokeContext (line 43) | public class InvokeContext {
method getService (line 49) | public static PostmanService getService(String serviceKey){
method getRequestParam (line 54) | public static List<RequestParam> getRequestParam(String methodNameKey){
method putService (line 59) | public static void putService(String serviceKey, PostmanService service){
method putMethod (line 63) | public static void putMethod(String methodKey, List<RequestParam> requ...
method checkExistAndLoad (line 67) | public static void checkExistAndLoad(String cluster, String serviceName){
method checkExistAndLoad (line 73) | public static void checkExistAndLoad(PostmanService postmanService){
method buildInvocation (line 83) | public static Pair<PostmanDubboRequest, Invocation> buildInvocation(St...
FILE: src/main/java/com/rpcpostman/service/creation/Creator.java
type Creator (line 33) | public interface Creator {
method create (line 35) | Pair<Boolean, String> create(String cluster, GAV gav, String serviceNa...
method refresh (line 37) | Pair<Boolean, String> refresh(String cluster, String serviceName);
FILE: src/main/java/com/rpcpostman/service/creation/entity/DubboPostmanService.java
class DubboPostmanService (line 37) | @Data
method getCluster (line 60) | @Override
method getServiceName (line 65) | @Override
method getGav (line 70) | @Override
method getInterfaceModelList (line 75) | @Override
method setLoadedToClassLoader (line 80) | @Override
method getLoadedToClassLoader (line 86) | public boolean getLoadedToClassLoader(){
FILE: src/main/java/com/rpcpostman/service/creation/entity/GrpcPostmanService.java
class GrpcPostmanService (line 34) | public class GrpcPostmanService implements PostmanService {
method getCluster (line 36) | @Override
method getServiceName (line 41) | @Override
method getGav (line 46) | @Override
method getInterfaceModelList (line 51) | @Override
method setLoadedToClassLoader (line 56) | @Override
method getLoadedToClassLoader (line 61) | @Override
FILE: src/main/java/com/rpcpostman/service/creation/entity/InterfaceEntity.java
class InterfaceEntity (line 39) | @Data
FILE: src/main/java/com/rpcpostman/service/creation/entity/MethodEntity.java
class MethodEntity (line 38) | @Data
FILE: src/main/java/com/rpcpostman/service/creation/entity/ParamEntity.java
class ParamEntity (line 34) | @Data
FILE: src/main/java/com/rpcpostman/service/creation/entity/PostmanService.java
type PostmanService (line 34) | public interface PostmanService {
method getCluster (line 36) | String getCluster();
method getServiceName (line 38) | String getServiceName();
method getGav (line 40) | GAV getGav();
method getInterfaceModelList (line 42) | List<InterfaceEntity> getInterfaceModelList();
method setLoadedToClassLoader (line 44) | void setLoadedToClassLoader(boolean load);
method getLoadedToClassLoader (line 46) | boolean getLoadedToClassLoader();
FILE: src/main/java/com/rpcpostman/service/creation/entity/RequestParam.java
class RequestParam (line 36) | @Data
FILE: src/main/java/com/rpcpostman/service/creation/impl/DubboCreator.java
class DubboCreator (line 55) | @Component
method create (line 66) | @Override
method refresh (line 101) | public Pair<Boolean, String> refresh(String cluster, String serviceName){
method doCreateService (line 108) | private Pair<Boolean, String> doCreateService(String cluster,
method doMaven (line 151) | private boolean doMaven(
FILE: src/main/java/com/rpcpostman/service/creation/impl/GrpcCreator.java
class GrpcCreator (line 34) | class GrpcCreator implements Creator {
method create (line 36) | @Override
method refresh (line 41) | @Override
FILE: src/main/java/com/rpcpostman/service/invocation/Converter.java
type Converter (line 34) | public interface Converter<R extends PostmanRequest,T extends RpcParamVa...
method convert (line 36) | T convert(R request, Invocation invocation) throws ParamException;
FILE: src/main/java/com/rpcpostman/service/invocation/Invocation.java
type Invocation (line 34) | public interface Invocation {
method getJavaMethodName (line 39) | String getJavaMethodName();
method setJavaMethodName (line 41) | void setJavaMethodName(String javaMethodName);
method getParams (line 43) | List<RequestParam> getParams();
method setRequestParams (line 45) | void setRequestParams(List<RequestParam> requestParams);
FILE: src/main/java/com/rpcpostman/service/invocation/Invoker.java
type Invoker (line 34) | public interface Invoker<T,R extends PostmanRequest> {
method invoke (line 36) | WebApiRspDto<T> invoke(R request, Invocation invocation);
method invoke (line 41) | WebApiRspDto<T> invoke(Pair<R,Invocation> pair);
FILE: src/main/java/com/rpcpostman/service/invocation/ResponseCode.java
type ResponseCode (line 31) | public enum ResponseCode {
method ResponseCode (line 40) | ResponseCode(int code, String desc) {
method getCode (line 45) | public int getCode() {
method getDesc (line 49) | public String getDesc() {
FILE: src/main/java/com/rpcpostman/service/invocation/entity/DubboInvocation.java
class DubboInvocation (line 35) | public class DubboInvocation implements Invocation {
method getJavaMethodName (line 41) | @Override
method setJavaMethodName (line 46) | public void setJavaMethodName(String javaMethodName) {
method getParams (line 50) | @Override
method setRequestParams (line 55) | public void setRequestParams(List<RequestParam> requestParams) {
FILE: src/main/java/com/rpcpostman/service/invocation/entity/DubboParamValue.java
class DubboParamValue (line 33) | public class DubboParamValue implements RpcParamValue {
method addParamTypeName (line 45) | public void addParamTypeName(String typeName) {
method getParamTypeNames (line 49) | public List<String> getParamTypeNames() {
method addParamValue (line 53) | public void addParamValue(Object paramValue) {
method getParamValues (line 57) | public List<Object> getParamValues() {
method setDubboUrl (line 61) | public void setDubboUrl(String dubboUrl){
method getDubboUrl (line 65) | public String getDubboUrl() {
method isUseDubbo (line 69) | public boolean isUseDubbo(){
method setUseDubbo (line 73) | public void setUseDubbo(boolean useDubbo){
method getRegistry (line 77) | public String getRegistry(){
method setRegistry (line 81) | public void setRegistry(String registry){
FILE: src/main/java/com/rpcpostman/service/invocation/entity/PostmanDubboRequest.java
class PostmanDubboRequest (line 30) | public class PostmanDubboRequest implements PostmanRequest {
method getDubboParam (line 42) | public String getDubboParam() {
method setDubboParam (line 46) | public void setDubboParam(String dubboParam){
method getCluster (line 50) | public String getCluster() {
method setCluster (line 54) | public void setCluster(String cluster) {
method getServiceName (line 58) | public String getServiceName() {
method setServiceName (line 62) | public void setServiceName(String serviceName) {
method getGroup (line 66) | public String getGroup() {
method setGroup (line 70) | public void setGroup(String group) {
method getInterfaceName (line 74) | public String getInterfaceName() {
method setInterfaceName (line 78) | public void setInterfaceName(String interfaceName) {
method getVersion (line 82) | public String getVersion() {
method setVersion (line 86) | public void setVersion(String version) {
method getMethodName (line 90) | public String getMethodName() {
method setMethodName (line 94) | public void setMethodName(String methodName) {
method getDubboIp (line 98) | public String getDubboIp(){
method setDubboIp (line 102) | public void setDubboIp(String dubboIp) {
FILE: src/main/java/com/rpcpostman/service/invocation/entity/PostmanRequest.java
type PostmanRequest (line 30) | public interface PostmanRequest {
FILE: src/main/java/com/rpcpostman/service/invocation/entity/RpcParamValue.java
type RpcParamValue (line 30) | public interface RpcParamValue {
FILE: src/main/java/com/rpcpostman/service/invocation/exception/ParamException.java
class ParamException (line 33) | public class ParamException extends Exception {
method ParamException (line 37) | public ParamException(String msg){
method getCode (line 42) | public int getCode() {
FILE: src/main/java/com/rpcpostman/service/invocation/impl/DubboConverter.java
class DubboConverter (line 44) | @Component
method convert (line 49) | @Override
method parseExternalParams (line 100) | private void parseExternalParams(PostmanDubboRequest request, DubboPar...
FILE: src/main/java/com/rpcpostman/service/invocation/impl/DubboInvoker.java
class DubboInvoker (line 52) | @Service
method invoke (line 64) | @Override
method invoke (line 95) | @Override
method getOrCreateService (line 100) | private GenericService getOrCreateService(PostmanDubboRequest request,...
method createReference (line 139) | ReferenceConfig<GenericService> createReference(PostmanDubboRequest re...
FILE: src/main/java/com/rpcpostman/service/invocation/impl/GrpcInvoker.java
class GrpcInvoker (line 36) | class GrpcInvoker implements Invoker<Object,PostmanRequest> {
method invoke (line 38) | @Override
method invoke (line 43) | @Override
FILE: src/main/java/com/rpcpostman/service/load/Loader.java
type Loader (line 30) | public interface Loader {
FILE: src/main/java/com/rpcpostman/service/load/classloader/ApiJarClassLoader.java
class ApiJarClassLoader (line 44) | public class ApiJarClassLoader extends URLClassLoader {
method ApiJarClassLoader (line 46) | public ApiJarClassLoader(URL[] urls) {
method loadClassWithResolve (line 51) | public Class<?> loadClassWithResolve(String name) throws ClassNotFound...
method appendURL (line 56) | public void appendURL(URL url){
method addURL (line 61) | @Override
method loadClass (line 66) | @Override
FILE: src/main/java/com/rpcpostman/service/load/impl/JarLocalFileLoader.java
class JarLocalFileLoader (line 57) | public class JarLocalFileLoader implements Loader {
method loadRuntimeInfo (line 62) | public static void loadRuntimeInfo(PostmanService service) {
method getAllClassLoader (line 75) | public static Map<String, ApiJarClassLoader> getAllClassLoader() {
method getUrls (line 79) | private static List<URL> getUrls(String jarPath){
method getFileUrls (line 91) | private static URL getFileUrls(File jarFile){
method doLoad (line 106) | private static void doLoad(List<URL> urlList,PostmanService service){
FILE: src/main/java/com/rpcpostman/service/load/impl/JarUrlFileLoader.java
class JarUrlFileLoader (line 32) | public class JarUrlFileLoader implements Loader {
FILE: src/main/java/com/rpcpostman/service/maven/Maven.java
class Maven (line 42) | public class Maven {
method Maven (line 49) | public Maven(String nexusUrl, String fileBasePath) {
method dependency (line 54) | public boolean dependency(String serviceDirName,
method downPomAndJar (line 67) | private String downPomAndJar(String serviceName, String groupId, Strin...
method mavenCopyDependencies (line 123) | boolean mavenCopyDependencies(String pomPath, LogResultPrintStream res...
method doDownLoadFile (line 157) | void doDownLoadFile(String baseUrl,String filePath,String fileName) th...
method buildJarUrl (line 193) | String buildJarUrl(String groupId,String artifactId,String version){
method buildPomUrl (line 207) | String buildPomUrl(String groupId,String artifactId,String version){
FILE: src/main/java/com/rpcpostman/service/registry/Register.java
type Register (line 34) | public interface Register {
method pullData (line 36) | void pullData();
method getAllService (line 38) | Map<String,Map<String, InterfaceMetaInfo>> getAllService();
FILE: src/main/java/com/rpcpostman/service/registry/RegisterFactory.java
type RegisterFactory (line 30) | public interface RegisterFactory {
method addCluster (line 32) | void addCluster(String cluster);
method get (line 34) | Register get(String cluster);
FILE: src/main/java/com/rpcpostman/service/registry/entity/InterfaceMetaInfo.java
class InterfaceMetaInfo (line 37) | @Data
FILE: src/main/java/com/rpcpostman/service/registry/impl/AbstractRegisterFactory.java
class AbstractRegisterFactory (line 38) | public abstract class AbstractRegisterFactory implements RegisterFactory {
method addCluster (line 44) | @Override
method get (line 49) | public Register get(String cluster){
method remove (line 58) | public Register remove(String cluster){
method create (line 62) | public abstract Register create(String cluster);
FILE: src/main/java/com/rpcpostman/service/registry/impl/DubboRegisterFactory.java
class DubboRegisterFactory (line 34) | public class DubboRegisterFactory extends AbstractRegisterFactory{
method DubboRegisterFactory (line 38) | private DubboRegisterFactory(){}
method getInstance (line 40) | public static DubboRegisterFactory getInstance() {
method create (line 53) | public Register create(String cluster){
method getClusterSet (line 58) | public Set<String> getClusterSet(){
FILE: src/main/java/com/rpcpostman/service/registry/impl/RedisRegister.java
class RedisRegister (line 35) | public class RedisRegister implements Register {
method pullData (line 37) | @Override
method getAllService (line 42) | @Override
FILE: src/main/java/com/rpcpostman/service/registry/impl/ZkRegister.java
class ZkRegister (line 45) | public class ZkRegister implements Register {
method ZkRegister (line 59) | public ZkRegister(String cluster){
method pullData (line 65) | @Override
method getAllService (line 91) | @Override
method processDubboNodes (line 100) | private void processDubboNodes(List<String> dubboNodes){
method processChildNodes (line 143) | private void processChildNodes(List<String> children1) {
FILE: src/main/java/com/rpcpostman/service/repository/Repository.java
type Repository (line 30) | public interface Repository {
FILE: src/main/java/com/rpcpostman/service/repository/redis/RedisKeys.java
class RedisKeys (line 31) | public class RedisKeys {
FILE: src/main/java/com/rpcpostman/service/repository/redis/RedisRepository.java
class RedisRepository (line 38) | @Repository
method get (line 44) | public Object get(String key){
method setAdd (line 48) | public void setAdd(String key,Object value){
method members (line 52) | public Set<Object> members(String key){
method setRemove (line 57) | public long setRemove(String key,Object value){
method mapPut (line 63) | public void mapPut(String key,Object hashKey,Object value){
method mapGet (line 68) | public Object mapGet(String key,Object hashKey){
method mapGetKeys (line 72) | public Set<Object> mapGetKeys(String key){
method mapGetValues (line 76) | public List<Object> mapGetValues(String key){
method removeMap (line 81) | public void removeMap(String key,String hashKey){
FILE: src/main/java/com/rpcpostman/service/scenetest/JSEngine.java
class JSEngine (line 45) | class JSEngine {
method runScript (line 54) | protected static Map<String,Object> runScript(List<Pair<PostmanDubboRe...
method getAllJsContent (line 87) | private static String getAllJsContent(String[] pathArray){
FILE: src/main/java/com/rpcpostman/service/scenetest/SceneTester.java
class SceneTester (line 44) | @Service
method process (line 50) | public Map<String,Object> process(List<UserCaseDto> caseDtoList, Strin...
method buildRequest (line 58) | private List<Pair<PostmanDubboRequest, Invocation>> buildRequest(List<...
FILE: src/main/java/com/rpcpostman/util/BuildUtil.java
class BuildUtil (line 30) | public class BuildUtil {
method buildServiceKey (line 34) | public static String buildServiceKey(String cluster, String serviceName){
method buildInterfaceKey (line 38) | public static String buildInterfaceKey(String group, String interfaceN...
method getGroupByInterfaceKey (line 47) | public static String getGroupByInterfaceKey(String interfaceKey){
method getInterfaceNameByInterfaceKey (line 51) | public static String getInterfaceNameByInterfaceKey(String interfaceKey){
method getVersionByInterfaceKey (line 55) | public static String getVersionByInterfaceKey(String interfaceKey){
method getJavaMethodName (line 59) | public static String getJavaMethodName(String methodName){
method buildMethodNameKey (line 63) | public static String buildMethodNameKey(String cluster,
method getMethodNameKey (line 77) | public static String getMethodNameKey(String cluster,
method buildZkUrl (line 94) | public static String buildZkUrl(final String zk){
FILE: src/main/java/com/rpcpostman/util/Constant.java
class Constant (line 31) | final public class Constant {
FILE: src/main/java/com/rpcpostman/util/ExceptionHelper.java
class ExceptionHelper (line 35) | public class ExceptionHelper {
method getExceptionStackString (line 37) | public static String getExceptionStackString(Exception exp){
FILE: src/main/java/com/rpcpostman/util/FileWithString.java
class FileWithString (line 35) | public class FileWithString {
method string2File (line 37) | public static void string2File(final String str, final String fileName...
method string2FileNotSafe (line 56) | public static void string2FileNotSafe(final String str, final String f...
method file2String (line 76) | public static String file2String(final String fileName) {
method file2String (line 81) | public static String file2String(final File file) {
method file2String (line 110) | public static String file2String(final URL url) {
FILE: src/main/java/com/rpcpostman/util/JSON.java
class JSON (line 44) | public class JSON {
method objectToString (line 64) | public static String objectToString(Object object){
method parseObject (line 75) | public static <T> T parseObject(String jsonString, Class<T> tClass){
method parseObject (line 85) | public static Object parseObject(String jsonString,JavaType javaType){
FILE: src/main/java/com/rpcpostman/util/LogResultPrintStream.java
class LogResultPrintStream (line 35) | public class LogResultPrintStream extends PrintStream {
method LogResultPrintStream (line 41) | public LogResultPrintStream(ByteArrayOutputStream byteArrayOutputStrea...
method isSuccess (line 48) | public boolean isSuccess() {
method setSuccess (line 53) | public void setSuccess(boolean success) {
method getLogByteArray (line 58) | public byte[] getLogByteArray() {
FILE: src/main/java/com/rpcpostman/util/XmlUtil.java
class XmlUtil (line 42) | public class XmlUtil {
method parseDependencyXml (line 46) | public static Map<String,String> parseDependencyXml(String dependency){
FILE: src/main/resources/public/static/js/app.713c0695.js
function s (line 1) | function s(e){var t=r(e);return a(t)}
function r (line 1) | function r(e){var t=n[e];if(!(t+1)){var a=new Error("Cannot find module ...
function x (line 1) | function x(e){return""+e?""+e+" - "+y:""+y}
function Q (line 1) | function Q(e){return G({url:"/dubbo-postman/all-zk",method:"get",params:...
function ae (line 1) | function ae(e){return/^(https?:|mailto:|tel:)/.test(e)}
function Be (line 1) | function Be(e){return G({url:"/dubbo-postman/create",method:"get",params...
function Re (line 1) | function Re(e){return G({url:"/dubbo-postman/result/serviceNames",method...
function Fe (line 1) | function Fe(e){return G({url:"/dubbo-postman/result/interfaceNames",meth...
function Pe (line 1) | function Pe(e){return G({url:"/dubbo-postman/case/group/list",method:"ge...
function je (line 1) | function je(e){return G({url:"/dubbo-postman/case/group-name/list",metho...
function qe (line 1) | function qe(e){return G({url:"/dubbo-postman/case/group-case-detail/list...
function d (line 1) | function d(){o+="\n",l=!0,++c}
function Ze (line 1) | function Ze(e){return G({url:"/dubbo-postman/case/scene/save",method:"po...
function et (line 1) | function et(e){return G({url:"/dubbo-postman/case/scene-name/list",metho...
function s (line 1) | function s(e){var t=r(e);return a(t)}
function r (line 1) | function r(e){var t=n[e];if(!(t+1)){var a=new Error("Cannot find module ...
FILE: src/main/resources/public/static/js/chunk-elementUI.753a79b5.js
function c (line 1) | function c(e,t){for(var i=[],n=0,s=e.length;n<s;n++)i.push(e[n].substr(0...
function d (line 1) | function d(e){return function(t,i,n){var s=n[e].indexOf(i.charAt(0).toUp...
function h (line 1) | function h(e,t){for(e=String(e),t=t||2;e.length<t;)e="0"+e;return e}
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e,t,i){return function(){var n=arguments.length>0&&void 0!==a...
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function _ (line 1) | function _(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function e (line 1) | function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Ca...
function h (line 1) | function h(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Erro...
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function f (line 1) | function f(e,t,i,n){for(var s=t;s<i;s++)e[s]=n}
function e (line 1) | function e(t){for(var i in function(e,t){if(!(e instanceof t))throw new ...
function _e (line 1) | function _e(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function d (line 1) | function d(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function _ (line 1) | function _(e){return e&&e.__esModule?e:{default:e}}
function p (line 1) | function p(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function e (line 1) | function e(t){for(var i in function(e,t){if(!(e instanceof t))throw new ...
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function h (line 1) | function h(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(){}
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function e (line 1) | function e(t){var i=this;for(var n in function(e,t){if(!(e instanceof t)...
function e (line 1) | function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.en...
function e (line 1) | function e(t){for(var i in function(e,t){if(!(e instanceof t))throw new ...
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(){}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
function f (line 1) | function f(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function d (line 1) | function d(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function i (line 1) | function i(e,i,n){this._reference=e.jquery?e[0]:e,this.state={};var s=vo...
function n (line 1) | function n(t){var i=t.style.display,n=t.style.visibility;t.style.display...
function s (line 1) | function s(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"...
function o (line 1) | function o(e){var t=Object.assign({},e);return t.right=t.left+t.width,t....
function r (line 1) | function r(e,t){var i,n=0;for(i in e){if(e[i]===t)return n;n++}return null}
function a (line 1) | function a(t,i){var n=e.getComputedStyle(t,null);return n[i]}
function l (line 1) | function l(t){var i=t.offsetParent;return i!==e.document.body&&i?i:e.doc...
function u (line 1) | function u(t){var i=t.parentNode;return i?i===e.document?e.document.body...
function c (line 1) | function c(e,t){Object.keys(t).forEach(function(i){var n="";-1!==["width...
function d (line 1) | function d(e){var t={width:e.offsetWidth,height:e.offsetHeight,left:e.of...
function h (line 1) | function h(e){var t=e.getBoundingClientRect(),i=-1!=navigator.userAgent....
function f (line 1) | function f(t){for(var i=["","ms","webkit","moz","o"],n=0;n<i.length;n++)...
function a (line 1) | function a(e,t){t.forEach(function(t){e.classList.add(t)})}
function l (line 1) | function l(e,t){t.forEach(function(t){e.setAttribute(t.split(":")[0],t.s...
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function o (line 1) | function o(e,t){for(var i in t)e[i]=t[i];return e}
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
function i (line 1) | function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{...
FILE: src/main/resources/public/static/js/chunk-libs.b46743d1.js
function t (line 1) | function t(t){return{type:t,style:"keyword"}}
function p (line 1) | function p(t,e,n){return r=t,i=n,e}
function v (line 1) | function v(t,e){var n=t.next();if('"'==n||"'"==n)return e.tokenize=funct...
function m (line 1) | function m(t,e){for(var n,r=!1;n=t.next();){if("/"==n&&r){e.tokenize=v;b...
function g (line 1) | function g(t,e){for(var n,r=!1;null!=(n=t.next());){if(!r&&("`"==n||"$"=...
function b (line 1) | function b(t,e){e.fatArrowAt&&(e.fatArrowAt=null);var n=t.string.indexOf...
function x (line 1) | function x(t,e,n,r,i,o){this.indented=t,this.column=e,this.type=n,this.p...
function C (line 1) | function C(t,e){for(var n=t.localVars;n;n=n.next)if(n.name==e)return!0;f...
function k (line 1) | function k(){for(var t=arguments.length-1;t>=0;t--)_.cc.push(arguments[t])}
function S (line 1) | function S(){return k.apply(null,arguments),!0}
function O (line 1) | function O(t,e){for(var n=e;n;n=n.next)if(n.name==t)return!0;return!1}
function T (line 1) | function T(t){var e=_.state;if(_.marked="def",e.context)if("var"==e.lexi...
function E (line 1) | function E(t){return"public"==t||"private"==t||"protected"==t||"abstract...
function A (line 1) | function A(t,e,n){this.prev=t,this.vars=e,this.block=n}
function L (line 1) | function L(t,e){this.name=t,this.next=e}
function N (line 1) | function N(){_.state.context=new A(_.state.context,_.state.localVars,!1)...
function D (line 1) | function D(){_.state.context=new A(_.state.context,_.state.localVars,!0)...
function P (line 1) | function P(){_.state.localVars=_.state.context.vars,_.state.context=_.st...
function j (line 1) | function j(t,e){var n=function(){var n=_.state,r=n.indented;if("stat"==n...
function F (line 1) | function F(){var t=_.state;t.lexical.prev&&(")"==t.lexical.type&&(t.inde...
function R (line 1) | function R(t){return function e(n){return n==t?S():";"==t||"}"==n||")"==...
function I (line 1) | function I(t,e){return"var"==t?S(j("vardef",e),yt,R(";"),F):"keyword a"=...
function W (line 1) | function W(t){if("("==t)return S(Mt,R(")"))}
function H (line 1) | function H(t,e){return z(t,e,!1)}
function $ (line 1) | function $(t,e){return z(t,e,!0)}
function B (line 1) | function B(t){return"("!=t?k():S(j(")"),H,R(")"),F)}
function z (line 1) | function z(t,e,n){if(_.state.fatArrowAt==_.stream.start){var r=n?Y:K;if(...
function U (line 1) | function U(t){return t.match(/[;\}\)\],]/)?k():k(H)}
function q (line 1) | function q(t,e){return","==t?S(H):V(t,e,!1)}
function V (line 1) | function V(t,e,n){var r=0==n?q:V,i=0==n?H:$;return"=>"==t?S(N,n?Y:K,P):"...
function G (line 1) | function G(t,e){return"quasi"!=t?k():"${"!=e.slice(e.length-2)?S(G):S(H,X)}
function X (line 1) | function X(t){if("}"==t)return _.marked="string-2",_.state.tokenize=g,S(G)}
function K (line 1) | function K(t){return b(_.stream,_.state),k("{"==t?I:H)}
function Y (line 1) | function Y(t){return b(_.stream,_.state),k("{"==t?I:$)}
function J (line 1) | function J(t,e){if("target"==e)return _.marked="keyword",S(q)}
function Z (line 1) | function Z(t,e){if("target"==e)return _.marked="keyword",S(V)}
function Q (line 1) | function Q(t){return":"==t?S(F,I):k(q,R(";"),F)}
function tt (line 1) | function tt(t){if("variable"==t)return _.marked="property",S()}
function et (line 1) | function et(t,e){if("async"==t)return _.marked="property",S(et);if("vari...
function nt (line 1) | function nt(t){return"variable"!=t?k(rt):(_.marked="property",S(Et))}
function rt (line 1) | function rt(t){return":"==t?S($):"("==t?k(Et):void 0}
function it (line 1) | function it(t,e,n){function r(i,o){if(n?n.indexOf(i)>-1:","==i){var a=_....
function ot (line 1) | function ot(t,e,n){for(var r=3;r<arguments.length;r++)_.cc.push(argument...
function at (line 1) | function at(t){return"}"==t?S():k(I,at)}
function st (line 1) | function st(t,e){if(u){if(":"==t||"in"==e)return S(ct);if("?"==e)return ...
function lt (line 1) | function lt(t){if(u&&":"==t)return _.stream.match(/^\s*\w+\s+is\b/,!1)?S...
function ut (line 1) | function ut(t,e){if("is"==e)return _.marked="keyword",S()}
function ct (line 1) | function ct(t,e){return"keyof"==e||"typeof"==e||"infer"==e?(_.marked="ke...
function ft (line 1) | function ft(t){if("=>"==t)return S(ct)}
function dt (line 1) | function dt(t,e){return"variable"==t||"keyword"==_.style?(_.marked="prop...
function ht (line 1) | function ht(t,e){return"variable"==t&&_.stream.match(/^\s*[?:]/,!1)||"?"...
function pt (line 1) | function pt(t,e){return"<"==e?S(j(">"),it(ct,">"),F,pt):"|"==e||"."==t||...
function vt (line 1) | function vt(t,e){if("<"==e)return S(j(">"),it(ct,">"),F,pt)}
function mt (line 1) | function mt(){return k(ct,gt)}
function gt (line 1) | function gt(t,e){if("="==e)return S(ct)}
function yt (line 1) | function yt(t,e){return"enum"==e?(_.marked="keyword",S(qt)):k(bt,st,Ct,_t)}
function bt (line 1) | function bt(t,e){return u&&E(e)?(_.marked="keyword",S(bt)):"variable"==t...
function wt (line 1) | function wt(t,e){return"variable"!=t||_.stream.match(/^\s*:/,!1)?("varia...
function xt (line 1) | function xt(){return k(bt,Ct)}
function Ct (line 1) | function Ct(t,e){if("="==e)return S($)}
function _t (line 1) | function _t(t){if(","==t)return S(yt)}
function kt (line 1) | function kt(t,e){if("keyword b"==t&&"else"==e)return S(j("form","else"),...
function St (line 1) | function St(t,e){return"await"==e?S(St):"("==t?S(j(")"),Ot,F):void 0}
function Ot (line 1) | function Ot(t){return"var"==t?S(yt,Tt):"variable"==t?S(Tt):k(Tt)}
function Tt (line 1) | function Tt(t,e){return")"==t?S():";"==t?S(Tt):"in"==e||"of"==e?(_.marke...
function Et (line 1) | function Et(t,e){return"*"==e?(_.marked="keyword",S(Et)):"variable"==t?(...
function At (line 1) | function At(t,e){return"*"==e?(_.marked="keyword",S(At)):"variable"==t?(...
function Lt (line 1) | function Lt(t,e){return"keyword"==t||"variable"==t?(_.marked="type",S(Lt...
function Mt (line 1) | function Mt(t,e){return"@"==e&&S(H,Mt),"spread"==t?S(Mt):u&&E(e)?(_.mark...
function Nt (line 1) | function Nt(t,e){return"variable"==t?Dt(t,e):Pt(t,e)}
function Dt (line 1) | function Dt(t,e){if("variable"==t)return T(e),S(Pt)}
function Pt (line 1) | function Pt(t,e){return"<"==e?S(j(">"),it(mt,">"),F,Pt):"extends"==e||"i...
function jt (line 1) | function jt(t,e){return"async"==t||"variable"==t&&("static"==e||"get"==e...
function Ft (line 1) | function Ft(t,e){if("?"==e)return S(Ft);if(":"==t)return S(ct,Ct);if("="...
function Rt (line 1) | function Rt(t,e){return"*"==e?(_.marked="keyword",S(zt,R(";"))):"default...
function It (line 1) | function It(t,e){return"as"==e?(_.marked="keyword",S(R("variable"))):"va...
function Wt (line 1) | function Wt(t){return"string"==t?S():"("==t?k(H):k(Ht,$t,zt)}
function Ht (line 1) | function Ht(t,e){return"{"==t?ot(Ht,"}"):("variable"==t&&T(e),"*"==e&&(_...
function $t (line 1) | function $t(t){if(","==t)return S(Ht,$t)}
function Bt (line 1) | function Bt(t,e){if("as"==e)return _.marked="keyword",S(Ht)}
function zt (line 1) | function zt(t,e){if("from"==e)return _.marked="keyword",S(H)}
function Ut (line 1) | function Ut(t){return"]"==t?S():k(it($,"]"))}
function qt (line 1) | function qt(){return k(j("form"),bt,R("{"),j("}"),it(Vt,"}"),F,F)}
function Vt (line 1) | function Vt(){return k(bt,Ct)}
function Gt (line 1) | function Gt(t,e,n){return e.tokenize==v&&/^(?:operator|sof|keyword [bcd]...
function l (line 1) | function l(t){var e=0,n=0,r=0,i=0;return"detail"in t&&(n=t.detail),"whee...
function n (line 1) | function n(t,e){for(var n=0,r=t.length-1;r>=0;r--){var i=t[r];"."===i?t....
function o (line 1) | function o(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r<t.leng...
function r (line 1) | function r(t){for(var e=0;e<t.length&&""===t[e];e++);for(var n=t.length-...
function n (line 1) | function n(t,e){return t(e={exports:{}},e.exports),e.exports}
function t (line 1) | function t(t){var e=t&&"object"==typeof t;return e&&"[object RegExp]"!==...
function e (line 1) | function e(e,n){var i=n&&!0===n.clone;return i&&t(e)?r(function(t){retur...
function n (line 1) | function n(n,i,o){var a=n.slice();return i.forEach(function(i,s){void 0=...
function r (line 1) | function r(i,o,a){var s=Array.isArray(o),l=a||{arrayMerge:n},u=l.arrayMe...
function e (line 1) | function e(){t.apply(this,arguments)}
function o (line 1) | function o(){throw new Error("setTimeout has not been defined")}
function a (line 1) | function a(){throw new Error("clearTimeout has not been defined")}
function s (line 1) | function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&s...
function d (line 1) | function d(){c&&l&&(c=!1,l.length?u=l.concat(u):f=-1,u.length&&h())}
function h (line 1) | function h(){if(!c){var t=s(d);c=!0;for(var e=u.length;e;){for(l=u,u=[];...
function p (line 1) | function p(t,e){this.fun=t,this.array=e}
function v (line 1) | function v(){}
function i (line 1) | function i(){this.handlers=[]}
function n (line 1) | function n(t){return!!t.constructor&&"function"==typeof t.constructor.is...
function e (line 8) | function e(t){return t.state.search||(t.state.search=new function(){this...
function n (line 8) | function n(t){return"string"==typeof t&&t==t.toLowerCase()}
function r (line 8) | function r(t,e,r){return t.getSearchCursor(e,r,{caseFold:n(e),multiline:...
function i (line 8) | function i(t,e,n,r,i){t.openDialog?t.openDialog(e,i,{value:r,selectValue...
function o (line 8) | function o(t){return t.replace(/\\(.)/g,function(t,e){return"n"==e?"\n":...
function a (line 8) | function a(t){var e=t.match(/^\/(.*)\/([a-z]*)$/);if(e)try{t=new RegExp(...
function s (line 8) | function s(t,e,r){e.queryText=r,e.query=a(r),t.removeOverlay(e.overlay,n...
function l (line 8) | function l(n,r,o,a){var l=e(n);if(l.query)return u(n,r);var d=n.getSelec...
function u (line 8) | function u(n,i,o){n.operation(function(){var a=e(n),s=r(n,a.query,i?a.po...
function c (line 8) | function c(t){t.operation(function(){var n=e(t);n.lastQuery=n.query,n.qu...
function f (line 8) | function f(t){return'<span class="CodeMirror-search-label">'+t.phrase("S...
function d (line 8) | function d(t,e,n){t.operation(function(){for(var i=r(t,e);i.findNext();)...
function h (line 8) | function h(t,n){if(!t.getOption("readOnly")){var s=t.getSelection()||e(t...
function s (line 8) | function s(t){this.defaults=t,this.interceptors={request:new o,response:...
function a (line 8) | function a(t){return t&&t.__esModule?t:{default:t}}
function e (line 8) | function e(t,e){var n=Number(e);return/^[-+]/.test(e)?t.getCursor().line...
function n (line 8) | function n(t){var e=t.state.matchHighlighter;(e.active||t.hasFocus())&&i...
function r (line 8) | function r(t){var e=t.state.matchHighlighter;e.active||(e.active=!0,i(t,...
function i (line 8) | function i(t,e){clearTimeout(e.timeout),e.timeout=setTimeout(function(){...
function o (line 8) | function o(t,e,n,r){var i=t.state.matchHighlighter;if(t.addOverlay(i.ove...
function a (line 8) | function a(t){var e=t.state.matchHighlighter;e.overlay&&(t.removeOverlay...
function s (line 8) | function s(t){t.operation(function(){var e=t.state.matchHighlighter;if(a...
function t (line 8) | function t(t,e){return t(e={exports:{}},e.exports),e.exports}
function t (line 8) | function t(t){var e=t&&"object"==typeof t;return e&&"[object RegExp]"!==...
function e (line 8) | function e(e,n){var i=n&&!0===n.clone;return i&&t(e)?r(function(t){retur...
function n (line 8) | function n(n,i,o){var a=n.slice();return i.forEach(function(i,s){void 0=...
function r (line 8) | function r(i,o,a){var s=Array.isArray(o),l=a||{arrayMerge:n},u=l.arrayMe...
function e (line 8) | function e(){t.apply(this,arguments)}
function T (line 8) | function T(t){return t.replace(O,function(t){return"%"+t[0].charCodeAt(0...
function e (line 8) | function e(e){var r=this;void 0===e&&(e={}),t.call(this,n(m,e));var i=fu...
function a (line 12) | function a(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t[...
function r (line 12) | function r(t,e,n,r,i,o,a,s){var l,u="function"==typeof t?t.options:t;if(...
function e (line 12) | function e(e,n,r){var i,o=e.getWrapperElement();return(i=o.appendChild(d...
function n (line 12) | function n(t,e){t.state.currentNotificationClose&&t.state.currentNotific...
function u (line 12) | function u(e){if("string"==typeof e)f.value=e;else{if(s)return;s=!0,t.rm...
function f (line 12) | function f(){l||(l=!0,t.rmClass(a.parentNode,"dialog-opened"),a.parentNo...
function u (line 12) | function u(){s||(s=!0,clearTimeout(o),t.rmClass(a.parentNode,"dialog-ope...
function r (line 18) | function r(t){return void 0===t||null===t}
function i (line 18) | function i(t){return void 0!==t&&null!==t}
function o (line 18) | function o(t){return!0===t}
function a (line 18) | function a(t){return"string"==typeof t||"number"==typeof t||"symbol"==ty...
function s (line 18) | function s(t){return null!==t&&"object"==typeof t}
function u (line 18) | function u(t){return"[object Object]"===l.call(t)}
function c (line 18) | function c(t){return"[object RegExp]"===l.call(t)}
function f (line 18) | function f(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e...
function d (line 18) | function d(t){return null==t?"":"object"==typeof t?JSON.stringify(t,null...
function h (line 18) | function h(t){var e=parseFloat(t);return isNaN(e)?t:e}
function p (line 18) | function p(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i<r.len...
function m (line 18) | function m(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(...
function y (line 18) | function y(t,e){return g.call(t,e)}
function b (line 18) | function b(t){var e=Object.create(null);return function(n){return e[n]||...
function n (line 18) | function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t...
function O (line 18) | function O(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n...
function T (line 18) | function T(t,e){for(var n in e)t[n]=e[n];return t}
function E (line 18) | function E(t){for(var e={},n=0;n<t.length;n++)t[n]&&T(e,t[n]);return e}
function A (line 18) | function A(t,e,n){}
function N (line 18) | function N(t,e){if(t===e)return!0;var n=s(t),r=s(e);if(!n||!r)return!n&&...
function D (line 18) | function D(t,e){for(var n=0;n<t.length;n++)if(N(t[n],e))return n;return-1}
function P (line 18) | function P(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments...
function W (line 18) | function W(t){var e=(t+"").charCodeAt(0);return 36===e||95===e}
function H (line 18) | function H(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,wr...
function rt (line 18) | function rt(t){return"function"==typeof t&&/native code/.test(t.toString...
function t (line 18) | function t(){this.set=Object.create(null)}
function ct (line 18) | function ct(t){lt.target&&ut.push(lt.target),lt.target=t}
function ft (line 18) | function ft(){lt.target=ut.pop()}
function vt (line 18) | function vt(t){return new dt(void 0,void 0,void 0,String(t))}
function mt (line 18) | function mt(t){var e=new dt(t.tag,t.data,t.children,t.text,t.elm,t.conte...
function xt (line 18) | function xt(t){wt=t}
function _t (line 18) | function _t(t,e,n){t.__proto__=e}
function kt (line 18) | function kt(t,e,n){for(var r=0,i=n.length;r<i;r++){var o=n[r];H(t,o,e[o])}}
function St (line 18) | function St(t,e){var n;if(s(t)&&!(t instanceof dt))return y(t,"__ob__")&...
function Ot (line 18) | function Ot(t,e,n,r,i){var o=new lt,a=Object.getOwnPropertyDescriptor(t,...
function Tt (line 18) | function Tt(t,e,n){if(Array.isArray(t)&&f(e))return t.length=Math.max(t....
function Et (line 18) | function Et(t,e){if(Array.isArray(t)&&f(e))t.splice(e,1);else{var n=t.__...
function Lt (line 18) | function Lt(t,e){if(!e)return t;for(var n,r,i,o=Object.keys(e),a=0;a<o.l...
function Mt (line 18) | function Mt(t,e,n){return n?function(){var r="function"==typeof e?e.call...
function Nt (line 18) | function Nt(t,e){return e?t?t.concat(e):Array.isArray(e)?e:[e]:t}
function Dt (line 18) | function Dt(t,e,n,r){var i=Object.create(t||null);return e?T(i,e):i}
function jt (line 18) | function jt(t,e,n){"function"==typeof e&&(e=e.options),function(t,e){var...
function Ft (line 18) | function Ft(t,e,n,r){if("string"==typeof n){var i=t[e];if(y(i,n))return ...
function Rt (line 18) | function Rt(t,e,n,r){var i=e[t],o=!y(n,t),a=n[t],s=Ht(Boolean,i.type);if...
function It (line 18) | function It(t){var e=t&&t.toString().match(/^\s*function (\w+)/);return ...
function Wt (line 18) | function Wt(t,e){return It(t)===It(e)}
function Ht (line 18) | function Ht(t,e){if(!Array.isArray(e))return Wt(e,t)?0:-1;for(var n=0,r=...
function $t (line 18) | function $t(t,e,n){if(e)for(var r=e;r=r.$parent;){var i=r.$options.error...
function Bt (line 18) | function Bt(t,e,n){if(I.errorHandler)try{return I.errorHandler.call(null...
function zt (line 18) | function zt(t,e,n){if(!U&&!q||"undefined"==typeof console)throw t;consol...
function Xt (line 18) | function Xt(){Gt=!1;var t=Vt.slice(0);Vt.length=0;for(var e=0;e<t.length...
function Qt (line 18) | function Qt(t,e){var n;if(Vt.push(function(){if(t)try{t.call(e)}catch(t)...
function ee (line 18) | function ee(t){!function t(e,n){var r,i;var o=Array.isArray(e);if(!o&&!s...
function ie (line 18) | function ie(t){function e(){var t=arguments,n=e.fns;if(!Array.isArray(n)...
function oe (line 18) | function oe(t,e,n,i,o){var a,s,l,u;for(a in t)s=t[a],l=e[a],u=re(a),r(s)...
function ae (line 18) | function ae(t,e,n){var a;t instanceof dt&&(t=t.data.hook||(t.data.hook={...
function se (line 18) | function se(t,e,n,r,o){if(i(e)){if(y(e,n))return t[n]=e[n],o||delete e[n...
function le (line 18) | function le(t){return a(t)?[vt(t)]:Array.isArray(t)?function t(e,n){var ...
function ue (line 18) | function ue(t){return i(t)&&i(t.text)&&function(t){return!1===t}(t.isCom...
function ce (line 18) | function ce(t,e){return(t.__esModule||ot&&"Module"===t[Symbol.toStringTa...
function fe (line 18) | function fe(t){return t.isComment&&t.asyncFactory}
function de (line 18) | function de(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e...
function he (line 18) | function he(t,e,n){n?ne.$once(t,e):ne.$on(t,e)}
function pe (line 18) | function pe(t,e){ne.$off(t,e)}
function ve (line 18) | function ve(t,e,n){ne=t,oe(e,n||{},he,pe),ne=void 0}
function me (line 18) | function me(t,e){var n={};if(!t)return n;for(var r=0,i=t.length;r<i;r++)...
function ge (line 18) | function ge(t){return t.isComment&&!t.asyncFactory||" "===t.text}
function ye (line 18) | function ye(t,e){e=e||{};for(var n=0;n<t.length;n++)Array.isArray(t[n])?...
function we (line 18) | function we(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}
function xe (line 18) | function xe(t,e){if(e){if(t._directInactive=!1,we(t))return}else if(t._d...
function Ce (line 18) | function Ce(t,e){ct();var n=t.$options[e];if(n)for(var r=0,i=n.length;r<...
function Ae (line 18) | function Ae(){var t,e;for(Te=!0,_e.sort(function(t,e){return t.id-e.id})...
function De (line 18) | function De(t,e,n){Ne.get=function(){return this[e][n]},Ne.set=function(...
function Pe (line 18) | function Pe(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){va...
function Fe (line 18) | function Fe(t,e,n){var r=!et();"function"==typeof n?(Ne.get=r?Re(e):n,Ne...
function Re (line 18) | function Re(t){return function(){var e=this._computedWatchers&&this._com...
function Ie (line 18) | function Ie(t,e,n,r){return u(n)&&(r=n,n=n.handler),"string"==typeof n&&...
function We (line 18) | function We(t,e){if(t){for(var n=Object.create(null),r=ot?Reflect.ownKey...
function He (line 18) | function He(t,e){var n,r,o,a,l;if(Array.isArray(t)||"string"==typeof t)f...
function $e (line 18) | function $e(t,e,n,r){var i,o=this.$scopedSlots[t];if(o)n=n||{},r&&(n=T(T...
function Be (line 18) | function Be(t){return Ft(this.$options,"filters",t)||M}
function ze (line 18) | function ze(t,e){return Array.isArray(t)?-1===t.indexOf(e):t!==e}
function Ue (line 18) | function Ue(t,e,n,r,i){var o=I.keyCodes[e]||n;return i&&r&&!I.keyCodes[e...
function qe (line 18) | function qe(t,e,n,r,i){if(n)if(s(n)){var o;Array.isArray(n)&&(n=E(n));va...
function Ve (line 18) | function Ve(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];...
function Ge (line 18) | function Ge(t,e,n){return Xe(t,"__once__"+e+(n?"_"+n:""),!0),t}
function Xe (line 18) | function Xe(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&...
function Ke (line 18) | function Ke(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}
function Ye (line 18) | function Ye(t,e){if(e)if(u(e)){var n=t.on=t.on?T({},t.on):{};for(var r i...
function Je (line 18) | function Je(t){t._o=Ge,t._n=h,t._s=d,t._l=He,t._t=$e,t._q=N,t._i=D,t._m=...
function Ze (line 18) | function Ze(t,e,r,i,a){var s,l=a.options;y(i,"_uid")?(s=Object.create(i)...
function Qe (line 18) | function Qe(t,e,n,r){var i=mt(t);return i.fnContext=n,i.fnOptions=r,e.sl...
function tn (line 18) | function tn(t,e){for(var n in e)t[x(n)]=e[n]}
function rn (line 18) | function rn(t,e,a,l,u){if(!r(t)){var c=a.$options._base;if(s(t)&&(t=c.ex...
function sn (line 18) | function sn(t,e,n,l,u,c){return(Array.isArray(n)||a(n))&&(u=l,l=n,n=void...
function un (line 18) | function un(t){var e=t.options;if(t.super){var n=un(t.super);if(n!==t.su...
function cn (line 18) | function cn(t,e,n){if(Array.isArray(t)){var r=[];n=Array.isArray(n)?n:[n...
function fn (line 18) | function fn(t){this._init(t)}
function dn (line 18) | function dn(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r...
function hn (line 18) | function hn(t){return t&&(t.Ctor.options.name||t.tag)}
function pn (line 18) | function pn(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeo...
function vn (line 18) | function vn(t,e){var n=t.cache,r=t.keys,i=t._vnode;for(var o in n){var a...
function mn (line 18) | function mn(t,e,n,r){var i=t[e];!i||r&&i.tag===r.tag||i.componentInstanc...
function r (line 18) | function r(){n.$off(t,r),e.apply(n,arguments)}
function Tn (line 18) | function Tn(t){for(var e=t.data,n=t,r=t;i(r.componentInstance);)(r=r.com...
function En (line 18) | function En(t,e){return{staticClass:An(t.staticClass,e.staticClass),clas...
function An (line 18) | function An(t,e){return t?e?t+" "+e:t:e||""}
function Ln (line 18) | function Ln(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=...
function Wn (line 18) | function Wn(t,e){var n=t.data.ref;if(i(n)){var r=t.context,o=t.component...
function Bn (line 18) | function Bn(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.i...
function zn (line 18) | function zn(t,e,n){var r,o,a={};for(r=e;r<=n;++r)i(o=t[r].key)&&(a[o]=r)...
function qn (line 18) | function qn(t,e){(t.data.directives||e.data.directives)&&function(t,e){v...
function Gn (line 18) | function Gn(t,e){var n,r,i=Object.create(null);if(!t)return i;for(n=0;n<...
function Xn (line 18) | function Xn(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{})...
function Kn (line 18) | function Kn(t,e,n,r,i){var o=t.def&&t.def[e];if(o)try{o(n.elm,t,n,r,i)}c...
function Jn (line 18) | function Jn(t,e){var n=e.componentOptions;if(!(i(n)&&!1===n.Ctor.options...
function Zn (line 18) | function Zn(t,e,n){t.tagName.indexOf("-")>-1?Qn(t,e,n):Cn(e)?On(n)?t.rem...
function Qn (line 18) | function Qn(t,e,n){if(On(n))t.removeAttribute(e);else{if(X&&!K&&"TEXTARE...
function er (line 18) | function er(t,e){var n=e.elm,o=e.data,a=t.data;if(!(r(o.staticClass)&&r(...
function ar (line 18) | function ar(t,e,n,r,i){e=function(t){return t._withTask||(t._withTask=fu...
function sr (line 18) | function sr(t,e,n,r){(r||nr).removeEventListener(t,e._withTask||e,n)}
function lr (line 18) | function lr(t,e){if(!r(t.data.on)||!r(e.data.on)){var n=e.data.on||{},o=...
function cr (line 18) | function cr(t,e){if(!r(t.data.domProps)||!r(e.data.domProps)){var n,o,a=...
function fr (line 18) | function fr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e...
function pr (line 18) | function pr(t){var e=vr(t.style);return t.staticStyle?T(t.staticStyle,e):e}
function vr (line 18) | function vr(t){return Array.isArray(t)?E(t):"string"==typeof t?hr(t):t}
function Cr (line 18) | function Cr(t,e){var n=e.data,o=t.data;if(!(r(n.staticStyle)&&r(n.style)...
function kr (line 18) | function kr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
function Sr (line 18) | function Sr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
function Or (line 18) | function Or(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&T...
function Fr (line 18) | function Fr(t){jr(function(){jr(t)})}
function Rr (line 18) | function Rr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n...
function Ir (line 18) | function Ir(t,e){t._transitionClasses&&m(t._transitionClasses,e),Sr(t,e)}
function Wr (line 18) | function Wr(t,e,n){var r=$r(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!...
function $r (line 18) | function $r(t,e){var n,r=window.getComputedStyle(t),i=r[Mr+"Delay"].spli...
function Br (line 18) | function Br(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.a...
function zr (line 18) | function zr(t){return 1e3*Number(t.slice(0,-1))}
function Ur (line 18) | function Ur(t,e){var n=t.elm;i(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._...
function qr (line 18) | function qr(t,e){var n=t.elm;i(n._enterCb)&&(n._enterCb.cancelled=!0,n._...
function Vr (line 18) | function Vr(t){return"number"==typeof t&&!isNaN(t)}
function Gr (line 18) | function Gr(t){if(r(t))return!1;var e=t.fns;return i(e)?Gr(Array.isArray...
function Xr (line 18) | function Xr(t,e){!0!==e.data.show&&Ur(e)}
function c (line 18) | function c(t){var e=u.parentNode(t);i(e)&&u.removeChild(e,t)}
function f (line 18) | function f(t,e,n,r,a,l,c){if(i(t.elm)&&i(l)&&(t=l[c]=mt(t)),t.isRootInse...
function d (line 18) | function d(t,e){i(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingI...
function h (line 18) | function h(t,e,n){i(t)&&(i(n)?n.parentNode===t&&u.insertBefore(t,e,n):u....
function v (line 18) | function v(t,e,n){if(Array.isArray(e))for(var r=0;r<e.length;++r)f(e[r],...
function m (line 18) | function m(t){for(;t.componentInstance;)t=t.componentInstance._vnode;ret...
function g (line 18) | function g(t,n){for(var r=0;r<s.create.length;++r)s.create[r](Hn,t);i(e=...
function y (line 18) | function y(t){var e;if(i(e=t.fnScopeId))u.setStyleScope(t.elm,e);else fo...
function b (line 18) | function b(t,e,n,r,i,o){for(;r<=i;++r)f(n[r],o,t,e,!1,n,r)}
function w (line 18) | function w(t){var e,n,r=t.data;if(i(r))for(i(e=r.hook)&&i(e=e.destroy)&&...
function x (line 18) | function x(t,e,n,r){for(;n<=r;++n){var o=e[n];i(o)&&(i(o.tag)?(C(o),w(o)...
function C (line 18) | function C(t,e){if(i(e)||i(t.data)){var n,r=s.remove.length+1;for(i(e)?e...
function _ (line 18) | function _(t,e,n,r){for(var o=n;o<r;o++){var a=e[o];if(i(a)&&Bn(t,a))ret...
function k (line 18) | function k(t,e,n,a){if(t!==e){var l=e.elm=t.elm;if(o(t.isAsyncPlaceholde...
function S (line 18) | function S(t,e,n){if(o(n)&&i(t.parent))t.parent.data.pendingInsert=e;els...
function T (line 18) | function T(t,e,n,r){var a,s=e.tag,l=e.data,u=e.children;if(r=r||l&&l.pre...
function Jr (line 18) | function Jr(t,e,n){Zr(t,e,n),(X||Y)&&setTimeout(function(){Zr(t,e,n)},0)}
function Zr (line 18) | function Zr(t,e,n){var r=e.value,i=t.multiple;if(!i||Array.isArray(r)){f...
function Qr (line 18) | function Qr(t,e){return e.every(function(e){return!N(e,t)})}
function ti (line 18) | function ti(t){return"_value"in t?t._value:t.value}
function ei (line 18) | function ei(t){t.target.composing=!0}
function ni (line 18) | function ni(t){t.target.composing&&(t.target.composing=!1,ri(t.target,"i...
function ri (line 18) | function ri(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,...
function ii (line 18) | function ii(t){return!t.componentInstance||t.data&&t.data.transition?t:i...
function si (line 18) | function si(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abst...
function li (line 18) | function li(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];...
function ui (line 18) | function ui(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{...
function di (line 18) | function di(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._ent...
function hi (line 18) | function hi(t){t.data.newPos=t.elm.getBoundingClientRect()}
function pi (line 18) | function pi(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-...
function n (line 24) | function n(){var t=this.$options;t.store?this.$store="function"==typeof ...
function o (line 24) | function o(t,e){Object.keys(t).forEach(function(n){return e(t[n],n)})}
function d (line 24) | function d(t,e){return e.indexOf(t)<0&&e.push(t),function(){var n=e.inde...
function h (line 24) | function h(t,e){t._actions=Object.create(null),t._mutations=Object.creat...
function p (line 24) | function p(t,e,n){var r=t._vm;t.getters={};var i={};o(t._wrappedGetters,...
function v (line 24) | function v(t,e,n,r,i){var o=!n.length,a=t._modules.getNamespace(n);if(r....
function m (line 24) | function m(t,e){return e.length?e.reduce(function(t,e){return t[e]},t):t}
function g (line 24) | function g(t,e,n){return function(t){return null!==t&&"object"==typeof t...
function y (line 24) | function y(t){u&&t===u||r(u=t)}
function _ (line 24) | function _(t){return Array.isArray(t)?t.map(function(t){return{key:t,val...
function k (line 24) | function k(t){return function(e,n){return"string"!=typeof e?(n=e,e=""):"...
function S (line 24) | function S(t,e,n){return t._modulesNamespaceMap[n]}
function i (line 24) | function i(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(...
function n (line 26) | function n(t,e,n){return t<e?e:t>n?n:t}
function r (line 26) | function r(t){return 100*(-1+t)}
function e (line 26) | function e(){var n=t.shift();n&&n(e)}
function n (line 26) | function n(n){return n=function(t){return t.replace(/^-ms-/,"ms-").repla...
function r (line 26) | function r(t,e,r){e=n(e),t.style[e]=r}
function a (line 26) | function a(t,e){var n="string"==typeof t?t:u(t);return n.indexOf(" "+e+"...
function s (line 26) | function s(t,e){var n=u(t),r=n+e;a(n,e)||(t.className=r.substring(1))}
function l (line 26) | function l(t,e){var n,r=u(t);a(t,e)&&(n=r.replace(" "+e+" "," "),t.class...
function u (line 26) | function u(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}
function c (line 26) | function c(t){t&&t.parentNode&&t.parentNode.removeChild(t)}
function i (line 26) | function i(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.se...
function o (line 26) | function o(t,e){return e&&!0===e.clone&&r(t)?s(function(t){return Array....
function a (line 26) | function a(t,e,n){var i=t.slice();return e.forEach(function(e,a){void 0=...
function s (line 26) | function s(t,e,n){var i=Array.isArray(e);return i===Array.isArray(t)?i?(...
function e (line 26) | function e(e,n,i,o){if(i&&i.call){var a=i;i=null}else var a=r(e,i,"range...
function r (line 26) | function r(t,e,r){if(e&&void 0!==e[r])return e[r];var i=t.options.foldOp...
function e (line 37) | function e(t,e){return void 0!==t&&!0!==t||(t=n.name),"function"==typeof...
function H (line 37) | function H(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` ...
function $ (line 37) | function $(e,n){"clone"!==e.lastPullMode&&(n=!0),r&&r.state!==n&&(G(r,"d...
function B (line 37) | function B(t,e,n){if(t){n=n||S;do{if(">*"===e&&t.parentNode===n||et(t,e)...
function z (line 37) | function z(t){var e=t.host;return e&&e.nodeType?e:t.parentNode}
function U (line 37) | function U(t,e,n){t.addEventListener(e,n,L)}
function q (line 37) | function q(t,e,n){t.removeEventListener(e,n,L)}
function V (line 37) | function V(t,e,n){if(t)if(t.classList)t.classList[n?"add":"remove"](e);e...
function G (line 37) | function G(t,e,n){var r=t&&t.style;if(r){if(void 0===n)return S.defaultV...
function X (line 37) | function X(t,e,n){if(t){var r=t.getElementsByTagName(e),i=0,o=r.length;i...
function K (line 37) | function K(t,e,n,i,o,a,s,l){t=t||e[_];var u=S.createEvent("Event"),c=t.o...
function Y (line 37) | function Y(t,e,n,r,i,o,a,s){var l,u,c=t[_],f=c.options.onMove;return(l=S...
function J (line 37) | function J(t){t.draggable=!1}
function Z (line 37) | function Z(){D=!1}
function Q (line 37) | function Q(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent...
function tt (line 37) | function tt(t,e){var n=0;if(!t||!t.parentNode)return-1;for(;t&&(t=t.prev...
function et (line 37) | function et(t,e){if(t){var n=(e=e.split(".")).shift().toUpperCase(),r=ne...
function nt (line 37) | function nt(t,e){var n,r;return function(){void 0===n&&(n=arguments,r=th...
function rt (line 37) | function rt(t,e){if(t&&e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])...
function it (line 37) | function it(t){return A&&A.dom?A.dom(t).cloneNode(!0):E?E(t).clone(!0)[0...
function ot (line 37) | function ot(t){return T(t,0)}
function at (line 37) | function at(t){return clearTimeout(t)}
function u (line 37) | function u(t){t.cancelToken&&t.cancelToken.throwIfRequested()}
function k (line 37) | function k(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}
function T (line 37) | function T(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firs...
function E (line 37) | function E(t,e){return T(t).appendChild(e)}
function A (line 37) | function A(t,e,n,r){var i=document.createElement(t);if(n&&(i.className=n...
function L (line 37) | function L(t,e,n,r){var i=A(t,e,n,r);return i.setAttribute("role","prese...
function M (line 37) | function M(t,e){if(3==e.nodeType&&(e=e.parentNode),t.contains)return t.c...
function N (line 37) | function N(){var t;try{t=document.activeElement}catch(e){t=document.body...
function D (line 37) | function D(t,e){var n=t.className;k(e).test(n)||(t.className+=(n?" ":"")...
function P (line 37) | function P(t,e){for(var n=t.split(" "),r=0;r<n.length;r++)n[r]&&!k(n[r])...
function F (line 37) | function F(t){var e=Array.prototype.slice.call(arguments,1);return funct...
function R (line 37) | function R(t,e,n){for(var r in e||(e={}),t)!t.hasOwnProperty(r)||!1===n&...
function I (line 37) | function I(t,e,n,r,i){null==e&&-1==(e=t.search(/[^\s\u00a0]/))&&(e=t.len...
function H (line 37) | function H(t,e){for(var n=0;n<t.length;++n)if(t[n]==e)return n;return-1}
function V (line 37) | function V(t,e,n){for(var r=0,i=0;;){var o=t.indexOf("\t",r);-1==o&&(o=t...
function X (line 37) | function X(t){for(;G.length<=t;)G.push(K(G)+" ");return G[t]}
function K (line 37) | function K(t){return t[t.length-1]}
function Y (line 37) | function Y(t,e){for(var n=[],r=0;r<t.length;r++)n[r]=e(t[r],r);return n}
function J (line 37) | function J(){}
function Z (line 37) | function Z(t,e){var n;return Object.create?n=Object.create(t):(J.prototy...
function tt (line 37) | function tt(t){return/\w/.test(t)||t>""&&(t.toUpperCase()!=t.toLowerCas...
function et (line 37) | function et(t,e){return e?!!(e.source.indexOf("\\w")>-1&&tt(t))||e.test(...
function nt (line 37) | function nt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;retu...
function it (line 37) | function it(t){return t.charCodeAt(0)>=768&&rt.test(t)}
function ot (line 37) | function ot(t,e,n){for(;(n<0?e>0:e<t.length)&&it(t.charAt(e));)e+=n;retu...
function at (line 37) | function at(t,e,n){for(var r=e>n?-1:1;;){if(e==n)return e;var i=(e+n)/2,...
function st (line 37) | function st(t,e){if((e-=t.first)<0||e>=t.size)throw new Error("There is ...
function lt (line 37) | function lt(t,e,n){var r=[],i=e.line;return t.iter(e.line,n.line+1,funct...
function ut (line 37) | function ut(t,e,n){var r=[];return t.iter(e,n,function(t){r.push(t.text)...
function ct (line 37) | function ct(t,e){var n=e-t.height;if(n)for(var r=t;r;r=r.parent)r.height...
function ft (line 37) | function ft(t){if(null==t.parent)return null;for(var e=t.parent,n=H(e.li...
function dt (line 37) | function dt(t,e){var n=t.first;t:do{for(var r=0;r<t.children.length;++r)...
function ht (line 37) | function ht(t,e){return e>=t.first&&e<t.first+t.size}
function pt (line 37) | function pt(t,e){return String(t.lineNumberFormatter(e+t.firstLineNumber))}
function vt (line 37) | function vt(t,e,n){if(void 0===n&&(n=null),!(this instanceof vt))return ...
function mt (line 37) | function mt(t,e){return t.line-e.line||t.ch-e.ch}
function gt (line 37) | function gt(t,e){return t.sticky==e.sticky&&0==mt(t,e)}
function yt (line 37) | function yt(t){return vt(t.line,t.ch)}
function bt (line 37) | function bt(t,e){return mt(t,e)<0?e:t}
function wt (line 37) | function wt(t,e){return mt(t,e)<0?t:e}
function xt (line 37) | function xt(t,e){return Math.max(t.first,Math.min(e,t.first+t.size-1))}
function Ct (line 37) | function Ct(t,e){if(e.line<t.first)return vt(t.first,0);var n=t.first+t....
function _t (line 37) | function _t(t,e){for(var n=[],r=0;r<e.length;r++)n[r]=Ct(t,e[r]);return n}
function Ot (line 37) | function Ot(t,e,n){this.marker=t,this.from=e,this.to=n}
function Tt (line 37) | function Tt(t,e){if(t)for(var n=0;n<t.length;++n){var r=t[n];if(r.marker...
function Et (line 37) | function Et(t,e){for(var n,r=0;r<t.length;++r)t[r]!=e&&(n||(n=[])).push(...
function At (line 37) | function At(t,e){if(e.full)return null;var n=ht(t,e.from.line)&&st(t,e.f...
function Lt (line 37) | function Lt(t){for(var e=0;e<t.length;++e){var n=t[e];null!=n.from&&n.fr...
function Mt (line 37) | function Mt(t){var e=t.markedSpans;if(e){for(var n=0;n<e.length;++n)e[n]...
function Nt (line 37) | function Nt(t,e){if(e){for(var n=0;n<e.length;++n)e[n].marker.attachLine...
function Dt (line 37) | function Dt(t){return t.inclusiveLeft?-1:0}
function Pt (line 37) | function Pt(t){return t.inclusiveRight?1:0}
function jt (line 37) | function jt(t,e){var n=t.lines.length-e.lines.length;if(0!=n)return n;va...
function Ft (line 37) | function Ft(t,e){var n,r=St&&t.markedSpans;if(r)for(var i=void 0,o=0;o<r...
function Rt (line 37) | function Rt(t){return Ft(t,!0)}
function It (line 37) | function It(t){return Ft(t,!1)}
function Wt (line 37) | function Wt(t,e){var n,r=St&&t.markedSpans;if(r)for(var i=0;i<r.length;+...
function Ht (line 37) | function Ht(t,e,n,r,i){var o=st(t,e),a=St&&o.markedSpans;if(a)for(var s=...
function $t (line 37) | function $t(t){for(var e;e=Rt(t);)t=e.find(-1,!0).line;return t}
function Bt (line 37) | function Bt(t,e){var n=st(t,e),r=$t(n);return n==r?e:ft(r)}
function zt (line 37) | function zt(t,e){if(e>t.lastLine())return e;var n,r=st(t,e);if(!Ut(t,r))...
function Ut (line 37) | function Ut(t,e){var n=St&&e.markedSpans;if(n)for(var r=void 0,i=0;i<n.l...
function qt (line 37) | function qt(t,e,n){if(null==n.to){var r=n.marker.find(1,!0);return qt(t,...
function Vt (line 37) | function Vt(t){for(var e=0,n=(t=$t(t)).parent,r=0;r<n.lines.length;++r){...
function Gt (line 37) | function Gt(t){if(0==t.height)return 0;for(var e,n=t.text.length,r=t;e=R...
function Xt (line 37) | function Xt(t){var e=t.display,n=t.doc;e.maxLine=st(n,n.first),e.maxLine...
function Yt (line 37) | function Yt(t,e,n){var r;Kt=null;for(var i=0;i<t.length;++i){var o=t[i];...
function n (line 37) | function n(n){return n<=247?t.charAt(n):1424<=n&&n<=1524?"R":1536<=n&&n<...
function l (line 37) | function l(t,e,n){this.level=t,this.from=e,this.to=n}
function Zt (line 37) | function Zt(t,e){var n=t.order;return null==n&&(n=t.order=Jt(t.text,e)),n}
function ee (line 37) | function ee(t,e){return t._handlers&&t._handlers[e]||Qt}
function ne (line 37) | function ne(t,e,n){if(t.removeEventListener)t.removeEventListener(e,n,!1...
function re (line 37) | function re(t,e){var n=ee(t,e);if(n.length)for(var r=Array.prototype.sli...
function ie (line 37) | function ie(t,e,n){return"string"==typeof e&&(e={type:e,preventDefault:f...
function oe (line 37) | function oe(t){var e=t._handlers&&t._handlers.cursorActivity;if(e)for(va...
function ae (line 37) | function ae(t,e){return ee(t,e).length>0}
function se (line 37) | function se(t){t.prototype.on=function(t,e){te(this,t,e)},t.prototype.of...
function le (line 37) | function le(t){t.preventDefault?t.preventDefault():t.returnValue=!1}
function ue (line 37) | function ue(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}
function ce (line 37) | function ce(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.r...
function fe (line 37) | function fe(t){le(t),ue(t)}
function de (line 37) | function de(t){return t.target||t.srcElement}
function he (line 37) | function he(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?...
function ge (line 37) | function ge(t){if(null==pe){var e=A("span","");E(t,A("span",[e,document...
function ye (line 37) | function ye(t){if(null!=ve)return ve;var e=E(t,document.createTextNode("...
function Se (line 37) | function Se(t){if("string"==typeof t&&ke.hasOwnProperty(t))t=ke[t];else ...
function Oe (line 37) | function Oe(t,e){e=Se(e);var n=_e[e.name];if(!n)return Oe(t,"text/plain"...
function Ee (line 37) | function Ee(t,e){var n=Te.hasOwnProperty(t)?Te[t]:Te[t]={};R(e,n)}
function Ae (line 37) | function Ae(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e)...
function Le (line 37) | function Le(t,e){for(var n;t.innerMode&&(n=t.innerMode(e))&&n.mode!=t;)e...
function Me (line 37) | function Me(t,e,n){return!t.startState||t.startState(e,n)}
function je (line 37) | function je(t,e,n,r){var i=[t.state.modeGen],o={};Ue(t,e.text,t.doc.mode...
function Fe (line 37) | function Fe(t,e,n){if(!e.styles||e.styles[0]!=t.state.modeGen){var r=Re(...
function Re (line 37) | function Re(t,e,n){var r=t.doc,i=t.display;if(!r.mode.startState)return ...
function Ie (line 37) | function Ie(t,e,n,r){var i=t.doc.mode,o=new Ne(e,t.options.tabSize,n);fo...
function We (line 37) | function We(t,e){if(t.blankLine)return t.blankLine(e);if(t.innerMode){va...
function He (line 37) | function He(t,e,n,r){for(var i=0;i<10;i++){r&&(r[0]=Le(t,n).mode);var o=...
function Be (line 37) | function Be(t,e,n,r){var i,o=t.doc,a=o.mode;e=Ct(o,e);var s,l=st(o,e.lin...
function ze (line 37) | function ze(t,e){if(t)for(;;){var n=t.match(/(?:^|\s+)line-(background-)...
function Ue (line 37) | function Ue(t,e,n,r,i,o,a){var s=n.flattenSpans;null==s&&(s=t.options.fl...
function Ve (line 37) | function Ve(t){t.parent=null,Mt(t)}
function Ke (line 37) | function Ke(t,e){if(!t||/^\s*$/.test(t))return null;var n=e.addModeClass...
function Ye (line 37) | function Ye(t,e){var n=L("span",null,null,l?"padding-right: .1px":null),...
function Je (line 37) | function Je(t){var e=A("span","•","cm-invalidchar");return e.title="\\u"...
function Ze (line 37) | function Ze(t,e,n,r,i,o,l){if(e){var u,c=t.splitSpaces?function(t,e){if(...
function Qe (line 37) | function Qe(t,e){return function(n,r,i,o,a,s,l){i=i?i+" cm-force-border"...
function tn (line 37) | function tn(t,e,n,r){var i=!r&&n.widgetNode;i&&t.map.push(t.pos,t.pos+e,...
function en (line 37) | function en(t,e,n){var r=t.markedSpans,i=t.text,o=0;if(r)for(var a,s,l,u...
function nn (line 37) | function nn(t,e,n){this.line=e,this.rest=function(t){for(var e,n;e=It(t)...
function rn (line 37) | function rn(t,e,n){for(var r,i=[],o=e;o<n;o=r){var a=new nn(t.doc,st(t.d...
function sn (line 37) | function sn(t,e){var n=ee(t,e);if(n.length){var r,i=Array.prototype.slic...
function ln (line 37) | function ln(){var t=an;an=null;for(var e=0;e<t.length;++e)t[e]()}
function un (line 37) | function un(t,e,n,r){for(var i=0;i<e.changes.length;i++){var o=e.changes...
function cn (line 37) | function cn(t){return t.node==t.text&&(t.node=A("div",null,null,"positio...
function fn (line 37) | function fn(t,e){var n=t.display.externalMeasured;return n&&n.line==e.li...
function dn (line 37) | function dn(t,e){var n=e.text.className,r=fn(t,e);e.text==e.node&&(e.nod...
function hn (line 37) | function hn(t,e){!function(t,e){var n=e.bgClass?e.bgClass+" "+(e.line.bg...
function pn (line 37) | function pn(t,e,n,r){if(e.gutter&&(e.node.removeChild(e.gutter),e.gutter...
function vn (line 37) | function vn(t,e,n){e.alignable&&(e.alignable=null);for(var r=e.node.firs...
function mn (line 37) | function mn(t,e,n,r){var i=fn(t,e);return e.text=e.node=i.pre,i.bgClass&...
function gn (line 37) | function gn(t,e,n){if(yn(t,e.line,e,n,!0),e.rest)for(var r=0;r<e.rest.le...
function yn (line 37) | function yn(t,e,n,r,i){if(e.widgets)for(var o=cn(n),a=0,s=e.widgets;a<s....
function bn (line 37) | function bn(t,e,n,r){if(t.noHScroll){(n.alignable||(n.alignable=[])).pus...
function wn (line 37) | function wn(t){if(null!=t.height)return t.height;var e=t.doc.cm;if(!e)re...
function xn (line 37) | function xn(t,e){for(var n=de(e);n!=t.wrapper;n=n.parentNode)if(!n||1==n...
function Cn (line 37) | function Cn(t){return t.lineSpace.offsetTop}
function _n (line 37) | function _n(t){return t.mover.offsetHeight-t.lineSpace.offsetHeight}
function kn (line 37) | function kn(t){if(t.cachedPaddingH)return t.cachedPaddingH;var e=E(t.mea...
function Sn (line 37) | function Sn(t){return $-t.display.nativeBarWidth}
function On (line 37) | function On(t){return t.display.scroller.clientWidth-Sn(t)-t.display.bar...
function Tn (line 37) | function Tn(t){return t.display.scroller.clientHeight-Sn(t)-t.display.ba...
function En (line 37) | function En(t,e,n){if(t.line==e)return{map:t.measure.map,cache:t.measure...
function An (line 37) | function An(t,e,n,r){return Nn(t,Mn(t,e),n,r)}
function Ln (line 37) | function Ln(t,e){if(e>=t.display.viewFrom&&e<t.display.viewTo)return t.d...
function Mn (line 37) | function Mn(t,e){var n=ft(e),r=Ln(t,n);r&&!r.text?r=null:r&&r.changes&&(...
function Nn (line 37) | function Nn(t,e,n,r,i){e.before&&(n=-1);var o,l=n+(r||"");return e.cache...
function jn (line 37) | function jn(t,e,n){for(var r,i,o,a,s,l,u=0;u<t.length;u+=3)if(s=t[u],l=t...
function Fn (line 37) | function Fn(t,e){var n=Pn;if("left"==e)for(var r=0;r<t.length&&(n=t[r])....
function Rn (line 37) | function Rn(t){if(t.measure&&(t.measure.cache={},t.measure.heights=null,...
function In (line 37) | function In(t){t.display.externalMeasure=null,T(t.display.lineMeasure);f...
function Wn (line 37) | function Wn(t){In(t),t.display.cachedCharWidth=t.display.cachedTextHeigh...
function Hn (line 37) | function Hn(){return c&&m?-(document.body.getBoundingClientRect().left-p...
function $n (line 37) | function $n(){return c&&m?-(document.body.getBoundingClientRect().top-pa...
function Bn (line 37) | function Bn(t){var e=0;if(t.widgets)for(var n=0;n<t.widgets.length;++n)t...
function zn (line 37) | function zn(t,e,n,r,i){if(!i){var o=Bn(e);n.top+=o,n.bottom+=o}if("line"...
function Un (line 37) | function Un(t,e,n){if("div"==n)return e;var r=e.left,i=e.top;if("page"==...
function qn (line 37) | function qn(t,e,n,r,i){return r||(r=st(t.doc,e.line)),zn(t,r,An(t,r,e.ch...
function Vn (line 37) | function Vn(t,e,n,r,i,o){function a(e,a){var s=Nn(t,i,e,a?"right":"left"...
function Gn (line 37) | function Gn(t,e){var n=0;e=Ct(t.doc,e),t.options.lineWrapping||(n=er(t.d...
function Xn (line 37) | function Xn(t,e,n,r,i){var o=vt(t,e,n);return o.xRel=i,r&&(o.outside=!0),o}
function Kn (line 37) | function Kn(t,e,n){var r=t.doc;if((n+=t.display.viewOffset)<0)return Xn(...
function Yn (line 37) | function Yn(t,e,n,r){r-=Bn(e);var i=e.text.length,o=at(function(e){retur...
function Jn (line 37) | function Jn(t,e,n,r){n||(n=Mn(t,e));var i=zn(t,e,Nn(t,n,r),"line").top;r...
function Zn (line 37) | function Zn(t,e,n,r){return!(t.bottom<=n)&&(t.top>n||(r?t.left:t.right)>e)}
function Qn (line 37) | function Qn(t,e,n,r,i){i-=Vt(e);var o=Mn(t,e),a=Bn(e),s=0,l=e.text.lengt...
function tr (line 37) | function tr(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(...
function er (line 37) | function er(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e...
function nr (line 37) | function nr(t){for(var e=t.display,n={},r={},i=e.gutters.clientLeft,o=e....
function rr (line 37) | function rr(t){return t.scroller.getBoundingClientRect().left-t.sizer.ge...
function ir (line 37) | function ir(t){var e=tr(t.display),n=t.options.lineWrapping,r=n&&Math.ma...
function or (line 37) | function or(t){var e=t.doc,n=ir(t);e.iter(function(t){var e=n(t);e!=t.he...
function ar (line 37) | function ar(t,e,n,r){var i=t.display;if(!n&&"true"==de(e).getAttribute("...
function sr (line 37) | function sr(t,e){if(e>=t.display.viewTo)return null;if((e-=t.display.vie...
function lr (line 37) | function lr(t){t.display.input.showSelection(t.display.input.prepareSele...
function ur (line 37) | function ur(t,e){void 0===e&&(e=!0);for(var n=t.doc,r={},i=r.cursors=doc...
function cr (line 37) | function cr(t,e,n){var r=Vn(t,e,"div",null,null,!t.options.singleCursorH...
function fr (line 37) | function fr(t,e){return t.top-e.top||t.left-e.left}
function dr (line 37) | function dr(t,e,n){var r=t.display,i=t.doc,o=document.createDocumentFrag...
function hr (line 37) | function hr(t){if(t.state.focused){var e=t.display;clearInterval(e.blink...
function pr (line 37) | function pr(t){t.state.focused||(t.display.input.focus(),mr(t))}
function vr (line 37) | function vr(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.stat...
function mr (line 37) | function mr(t,e){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!...
function gr (line 37) | function gr(t,e){t.state.delayingBlurEvent||(t.state.focused&&(re(t,"blu...
function yr (line 37) | function yr(t){for(var e=t.display,n=e.lineDiv.offsetTop,r=0;r<e.view.le...
function br (line 37) | function br(t){if(t.widgets)for(var e=0;e<t.widgets.length;++e){var n=t....
function wr (line 37) | function wr(t,e,n){var r=n&&null!=n.top?Math.max(0,n.top):t.scroller.scr...
function xr (line 37) | function xr(t){var e=t.display,n=e.view;if(e.alignWidgets||e.gutters.fir...
function Cr (line 37) | function Cr(t){if(!t.options.lineNumbers)return!1;var e=t.doc,n=pt(t.opt...
function _r (line 37) | function _r(t,e){var n=t.display,r=tr(t.display);e.top<0&&(e.top=0);var ...
function kr (line 37) | function kr(t,e){null!=e&&(Tr(t),t.curOp.scrollTop=(null==t.curOp.scroll...
function Sr (line 37) | function Sr(t){Tr(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:...
function Or (line 37) | function Or(t,e,n){null==e&&null==n||Tr(t),null!=e&&(t.curOp.scrollLeft=...
function Tr (line 37) | function Tr(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;...
function Er (line 37) | function Er(t,e,n,r){var i=_r(t,{left:Math.min(e.left,n.left),top:Math.m...
function Ar (line 37) | function Ar(t,e){Math.abs(t.doc.scrollTop-e)<2||(n||si(t,{top:e}),Lr(t,e...
function Lr (line 37) | function Lr(t,e,n){e=Math.min(t.display.scroller.scrollHeight-t.display....
function Mr (line 37) | function Mr(t,e,n,r){e=Math.min(e,t.display.scroller.scrollWidth-t.displ...
function Nr (line 37) | function Nr(t){var e=t.display,n=e.gutters.offsetWidth,r=Math.round(t.do...
function jr (line 37) | function jr(t,e){e||(e=Nr(t));var n=t.display.barWidth,r=t.display.barHe...
function Fr (line 37) | function Fr(t,e){var n=t.display,r=n.scrollbars.update(e);n.sizer.style....
function Ir (line 37) | function Ir(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.dis...
function Hr (line 37) | function Hr(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,for...
function $r (line 37) | function $r(t){var e=t.curOp;e&&function(t,e){var n=t.ownsGroup;if(n)try...
function Br (line 37) | function Br(t){var e=t.cm,n=e.display;!function(t){var e=t.display;!e.sc...
function zr (line 37) | function zr(t){t.updatedDisplay=t.mustUpdate&&oi(t.cm,t.update)}
function Ur (line 37) | function Ur(t){var e=t.cm,n=e.display;t.updatedDisplay&&yr(e),t.barMeasu...
function qr (line 37) | function qr(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style....
function Vr (line 37) | function Vr(t){var e=t.cm,n=e.display,r=e.doc;if(t.updatedDisplay&&ai(e,...
function Gr (line 37) | function Gr(t,e){if(t.curOp)return e();Hr(t);try{return e()}finally{$r(t)}}
function Xr (line 37) | function Xr(t,e){return function(){if(t.curOp)return e.apply(t,arguments...
function Kr (line 37) | function Kr(t){return function(){if(this.curOp)return t.apply(this,argum...
function Yr (line 37) | function Yr(t){return function(){var e=this.cm;if(!e||e.curOp)return t.a...
function Jr (line 37) | function Jr(t,e,n,r){null==e&&(e=t.doc.first),null==n&&(n=t.doc.first+t....
function Zr (line 37) | function Zr(t,e,n){t.curOp.viewChanged=!0;var r=t.display,i=t.display.ex...
function Qr (line 37) | function Qr(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display...
function ti (line 37) | function ti(t,e,n,r){var i,o=sr(t,e),a=t.display.view;if(!St||n==t.doc.f...
function ei (line 37) | function ei(t){for(var e=t.display.view,n=0,r=0;r<e.length;r++){var i=e[...
function ni (line 37) | function ni(t,e){t.doc.highlightFrontier<t.display.viewTo&&t.state.highl...
function ri (line 37) | function ri(t){var e=t.doc;if(!(e.highlightFrontier>=t.display.viewTo)){...
function oi (line 37) | function oi(t,e){var n=t.display,r=t.doc;if(e.editorIsHidden)return Qr(t...
function ai (line 37) | function ai(t,e){for(var n=e.viewport,r=!0;(r&&t.options.lineWrapping&&e...
function si (line 37) | function si(t,e){var n=new ii(t,e);if(oi(t,n)){yr(t),ai(t,n);var r=Nr(t)...
function li (line 37) | function li(t){var e=t.display.gutters.offsetWidth;t.display.sizer.style...
function ui (line 37) | function ui(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.disp...
function ci (line 37) | function ci(t){var e=t.display.gutters,n=t.options.gutters;T(e);for(var ...
function fi (line 37) | function fi(t){var e=H(t.gutters,"CodeMirror-linenumbers");-1==e&&t.line...
function pi (line 37) | function pi(t){var e=t.wheelDeltaX,n=t.wheelDeltaY;return null==e&&t.det...
function vi (line 37) | function vi(t){var e=pi(t);return e.x*=hi,e.y*=hi,e}
function mi (line 37) | function mi(t,e){var r=pi(e),i=r.x,o=r.y,a=t.display,s=a.scroller,u=s.sc...
function bi (line 37) | function bi(t,e,n){var r=t&&t.options.selectionsMayTouch,i=e[n];e.sort(f...
function wi (line 37) | function wi(t,e){return new gi([new yi(t,e||t)],0)}
function xi (line 37) | function xi(t){return t.text?vt(t.from.line+t.text.length-1,K(t.text).le...
function Ci (line 37) | function Ci(t,e){if(mt(t,e.from)<0)return t;if(mt(t,e.to)<=0)return xi(e...
function _i (line 37) | function _i(t,e){for(var n=[],r=0;r<t.sel.ranges.length;r++){var i=t.sel...
function ki (line 37) | function ki(t,e,n){return t.line==e.line?vt(n.line,t.ch-e.ch+n.ch):vt(n....
function Si (line 37) | function Si(t){t.doc.mode=Oe(t.options,t.doc.modeOption),Oi(t)}
function Oi (line 37) | function Oi(t){t.doc.iter(function(t){t.stateAfter&&(t.stateAfter=null),...
function Ti (line 37) | function Ti(t,e){return 0==e.from.ch&&0==e.to.ch&&""==K(e.text)&&(!t.cm|...
function Ei (line 37) | function Ei(t,e,n,r){function i(t){return n?n[t]:null}function o(t,n,i){...
function Ai (line 37) | function Ai(t,e,n){!function t(r,i,o){if(r.linked)for(var a=0;a<r.linked...
function Li (line 37) | function Li(t,e){if(e.cm)throw new Error("This document is already in us...
function Mi (line 37) | function Mi(t){("rtl"==t.doc.direction?D:O)(t.display.lineDiv,"CodeMirro...
function Ni (line 37) | function Ni(t){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastM...
function Di (line 37) | function Di(t,e){var n={from:yt(e.from),to:xi(e),text:lt(t,e.from,e.to)}...
function Pi (line 37) | function Pi(t){for(;t.length;){var e=K(t);if(!e.ranges)break;t.pop()}}
function ji (line 37) | function ji(t,e,n,r){var i=t.history;i.undone.length=0;var o,a,s=+new Da...
function Fi (line 37) | function Fi(t,e,n,r){var i=t.history,o=r&&r.origin;n==i.lastSelOp||o&&i....
function Ri (line 37) | function Ri(t,e){var n=K(e);n&&n.ranges&&n.equals(t)||e.push(t)}
function Ii (line 37) | function Ii(t,e,n,r){var i=e["spans_"+t.id],o=0;t.iter(Math.max(t.first,...
function Wi (line 37) | function Wi(t){if(!t)return null;for(var e,n=0;n<t.length;++n)t[n].marke...
function Hi (line 37) | function Hi(t,e){var n=function(t,e){var n=e["spans_"+t.id];if(!n)return...
function $i (line 37) | function $i(t,e,n){for(var r=[],i=0;i<t.length;++i){var o=t[i];if(o.rang...
function Bi (line 37) | function Bi(t,e,n,r){if(r){var i=t.anchor;if(n){var o=mt(e,i)<0;o!=mt(n,...
function zi (line 37) | function zi(t,e,n,r,i){null==i&&(i=t.cm&&(t.cm.display.shift||t.extend))...
function Ui (line 37) | function Ui(t,e,n){for(var r=[],i=t.cm&&(t.cm.display.shift||t.extend),o...
function qi (line 37) | function qi(t,e,n,r){var i=t.sel.ranges.slice(0);i[e]=n,Xi(t,bi(t.cm,i,t...
function Vi (line 37) | function Vi(t,e,n,r){Xi(t,wi(e,n),r)}
function Gi (line 37) | function Gi(t,e,n){var r=t.history.done,i=K(r);i&&i.ranges?(r[r.length-1...
function Xi (line 37) | function Xi(t,e,n){Ki(t,e,n),Fi(t,t.sel,t.cm?t.cm.curOp.id:NaN,n)}
function Ki (line 37) | function Ki(t,e,n){(ae(t,"beforeSelectionChange")||t.cm&&ae(t.cm,"before...
function Yi (line 37) | function Yi(t,e){e.equals(t.sel)||(t.sel=e,t.cm&&(t.cm.curOp.updateInput...
function Ji (line 37) | function Ji(t){Yi(t,Zi(t,t.sel,null,!1))}
function Zi (line 37) | function Zi(t,e,n,r){for(var i,o=0;o<e.ranges.length;o++){var a=e.ranges...
function Qi (line 37) | function Qi(t,e,n,r,i){var o=st(t,e.line);if(o.markedSpans)for(var a=0;a...
function to (line 37) | function to(t,e,n,r,i){var o=r||1,a=Qi(t,e,n,o,i)||!i&&Qi(t,e,n,o,!0)||Q...
function eo (line 37) | function eo(t,e,n,r){return n<0&&0==e.ch?e.line>t.first?Ct(t,vt(e.line-1...
function no (line 37) | function no(t){t.setSelection(vt(t.firstLine(),0),vt(t.lastLine()),z)}
function ro (line 37) | function ro(t,e,n){var r={canceled:!1,from:e.from,to:e.to,text:e.text,or...
function io (line 37) | function io(t,e,n){if(t.cm){if(!t.cm.curOp)return Xr(t.cm,io)(t,e,n);if(...
function oo (line 37) | function oo(t,e){if(1!=e.text.length||""!=e.text[0]||0!=mt(e.from,e.to))...
function ao (line 37) | function ao(t,e,n){var r=t.cm&&t.cm.state.suppressEdits;if(!r||n){for(va...
function so (line 37) | function so(t,e){if(0!=e&&(t.first+=e,t.sel=new gi(Y(t.sel.ranges,functi...
function lo (line 37) | function lo(t,e,n,r){if(t.cm&&!t.cm.curOp)return Xr(t.cm,lo)(t,e,n,r);if...
function uo (line 37) | function uo(t,e,n,r,i){var o;r||(r=n),mt(r,n)<0&&(n=(o=[r,n])[0],r=o[1])...
function co (line 37) | function co(t,e,n,r){n<t.line?t.line+=r:e<t.line&&(t.line=e,t.ch=0)}
function fo (line 37) | function fo(t,e,n,r){for(var i=0;i<t.length;++i){var o=t[i],a=!0;if(o.ra...
function ho (line 37) | function ho(t,e){var n=e.from.line,r=e.to.line,i=e.text.length-(r-n)-1;f...
function po (line 37) | function po(t,e,n,r){var i=e,o=e;return"number"==typeof e?o=st(t,xt(t,e)...
function vo (line 37) | function vo(t){this.lines=t,this.parent=null;for(var e=0,n=0;n<t.length;...
function mo (line 37) | function mo(t){this.children=t;for(var e=0,n=0,r=0;r<t.length;++r){var i...
function yo (line 37) | function yo(t,e,n){Vt(e)<(t.curOp&&t.curOp.scrollTop||t.doc.scrollTop)&&...
function xo (line 37) | function xo(t,e,n,r,i){if(r&&r.shared)return function(t,e,n,r,i){(r=R(r)...
function _o (line 37) | function _o(t){return t.findMarks(vt(t.first,0),t.clipPos(vt(t.lastLine(...
function ko (line 37) | function ko(t){for(var e=function(e){var n=t[e],r=[n.primary.doc];Ai(n.p...
function Eo (line 37) | function Eo(t){var e=this;if(Ao(e),!ie(e,t)&&!xn(e.display,t)){le(t),a&&...
function Ao (line 37) | function Ao(t){t.display.dragCursor&&(t.display.lineSpace.removeChild(t....
function Lo (line 37) | function Lo(t){if(document.getElementsByClassName){for(var e=document.ge...
function No (line 37) | function No(){Mo||(function(){var t;te(window,"resize",function(){null==...
function Do (line 37) | function Do(t){var e=t.display;e.cachedCharWidth=e.cachedTextHeight=e.ca...
function Wo (line 37) | function Wo(t){var e,n,r,i,o=t.split(/-(?!$)/);t=o[o.length-1];for(var a...
function Ho (line 37) | function Ho(t){var e={};for(var n in t)if(t.hasOwnProperty(n)){var r=t[n...
function $o (line 37) | function $o(t,e,n,r){var i=(e=qo(e)).call?e.call(t,r):e[t];if(!1===i)ret...
function Bo (line 37) | function Bo(t){var e="string"==typeof t?t:Po[t.keyCode];return"Ctrl"==e|...
function zo (line 37) | function zo(t,e,n){var r=t;return e.altKey&&"Alt"!=r&&(t="Alt-"+t),(C?e....
function Uo (line 37) | function Uo(t,e){if(f&&34==t.keyCode&&t.char)return!1;var n=Po[t.keyCode...
function qo (line 37) | function qo(t){return"string"==typeof t?Io[t]:t}
function Vo (line 37) | function Vo(t,e){for(var n=t.doc.sel.ranges,r=[],i=0;i<n.length;i++){for...
function Go (line 37) | function Go(t,e,n){var r=ot(t.text,e+n,n);return r<0||r>t.text.length?nu...
function Xo (line 37) | function Xo(t,e,n){var r=Go(t,e.ch,n);return null==r?null:new vt(e.line,...
function Ko (line 37) | function Ko(t,e,n,r,i){if(t){var o=Zt(n,e.doc.direction);if(o){var a,s=i...
function Jo (line 37) | function Jo(t,e){var n=st(t.doc,e),r=$t(n);return r!=n&&(e=ft(r)),Ko(!0,...
function Zo (line 37) | function Zo(t,e){var n=Jo(t,e.line),r=st(t.doc,n.line),i=Zt(r,t.doc.dire...
function Qo (line 37) | function Qo(t,e,n){if("string"==typeof e&&!(e=Yo[e]))return!1;t.display....
function ea (line 37) | function ea(t,e,n,r){var i=t.state.keySeq;if(i){if(Bo(e))return"handled"...
function na (line 37) | function na(t,e,n,r){var i=function(t,e,n){for(var r=0;r<t.state.keyMaps...
function ra (line 37) | function ra(t,e){var n=Uo(e,!0);return!!n&&(e.shiftKey&&!t.state.keySeq?...
function oa (line 37) | function oa(t){var e=this;if(e.curOp.focus=N(),!ie(e,t)){a&&s<11&&27==t....
function aa (line 37) | function aa(t){16==t.keyCode&&(this.doc.sel.shift=!1),ie(this,t)}
function sa (line 37) | function sa(t){var e=this;if(!(xn(e.display,t)||ie(e,t)||t.ctrlKey&&!t.a...
function fa (line 37) | function fa(t){var e=this,n=e.display;if(!(ie(e,t)||n.activeTouch&&n.inp...
function da (line 37) | function da(t,e,n){if("char"==n)return new yi(e,e);if("word"==n)return t...
function ha (line 37) | function ha(t,e,n,r){var i,o;if(e.touches)i=e.touches[0].clientX,o=e.tou...
function pa (line 37) | function pa(t,e){return ha(t,e,"gutterClick",!0)}
function va (line 37) | function va(t,e){xn(t.display,e)||function(t,e){return!!ae(t,"gutterCont...
function ma (line 37) | function ma(t){t.display.wrapper.className=t.display.wrapper.className.r...
function wa (line 37) | function wa(t){ci(t),Jr(t),xr(t)}
function xa (line 37) | function xa(t,e,n){var r=n&&n!=ga;if(!e!=!r){var i=t.display.dragFunctio...
function Ca (line 37) | function Ca(t){t.options.lineWrapping?(D(t.display.wrapper,"CodeMirror-w...
function _a (line 37) | function _a(t,e){var r=this;if(!(this instanceof _a))return new _a(t,e);...
function Sa (line 37) | function Sa(t,e,n,r){var i,o=t.doc;null==n&&(n="add"),"smart"==n&&(o.mod...
function Ta (line 37) | function Ta(t){Oa=t}
function Ea (line 37) | function Ea(t,e,n,r,i){var o=t.doc;t.display.shift=!1,r||(r=o.sel);var a...
function Aa (line 37) | function Aa(t,e){var n=t.clipboardData&&t.clipboardData.getData("Text");...
function La (line 37) | function La(t,e){if(t.options.electricChars&&t.options.smartIndent)for(v...
function Ma (line 37) | function Ma(t){for(var e=[],n=[],r=0;r<t.doc.sel.ranges.length;r++){var ...
function Na (line 37) | function Na(t,e,n,r){t.setAttribute("autocorrect",!!n),t.setAttribute("a...
function Da (line 37) | function Da(){var t=A("textarea",null,null,"position: absolute; bottom: ...
function Pa (line 37) | function Pa(t,e,n,r,i){var o=e,a=n,s=st(t,e.line);function l(r){var o;if...
function ja (line 37) | function ja(t,e,n,r){var i,o,a=t.doc,s=e.left;if("page"==r){var l=Math.m...
function Ra (line 37) | function Ra(t,e){var n=Ln(t,e.line);if(!n||n.hidden)return null;var r=st...
function Ia (line 37) | function Ia(t,e){return e&&(t.bad=!0),t}
function Wa (line 37) | function Wa(t,e,n){var r;if(e==t.display.lineDiv){if(!(r=t.display.lineD...
function Ha (line 37) | function Ha(t,e,n){var r=t.text.firstChild,i=!1;if(!e||!M(r,e))return Ia...
function o (line 37) | function o(t){if(!ie(r,t)){if(r.somethingSelected())Ta({lineWise:!1,text...
function u (line 37) | function u(){a&&(o+=s,l&&(o+=s),a=l=!1)}
function c (line 37) | function c(t){t&&(u(),o+=t)}
function f (line 37) | function f(e){if(1==e.nodeType){var n=e.getAttribute("cm-text");if(n)ret...
function o (line 37) | function o(t){if(!ie(r,t)){if(r.somethingSelected())Ta({lineWise:!1,text...
function g (line 37) | function g(){if(null!=i.selectionStart){var t=n.somethingSelected(),o="...
function y (line 37) | function y(){if(e.contextMenuPending==y&&(e.contextMenuPending=!1,e.wrap...
function n (line 37) | function n(n,r,i,o){t.defaults[n]=r,i&&(e[n]=o?function(t,e,n){n!=ga&&i(...
function r (line 37) | function r(){t.value=s.getValue()}
function u (line 37) | function u(){o=Number(new Date),n.apply(a,l)}
function n (line 44) | function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{...
function t (line 44) | function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.en...
function l (line 44) | function l(t){return t&&t.__esModule?t:{default:t}}
function e (line 44) | function e(t,n){!function(t,e){if(!(t instanceof e))throw new TypeError(...
function c (line 44) | function c(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e....
function t (line 44) | function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.en...
function t (line 44) | function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("C...
function n (line 44) | function n(){}
function i (line 44) | function i(){r.off(t,i),e.apply(n,arguments)}
function i (line 44) | function i(t,e,n,i,o){var a=function(t,e,n,i){return function(n){n.deleg...
function t (line 44) | function t(t,e){var n=-1;return t.some(function(t,r){return t[0]===e&&(n...
function e (line 44) | function e(){this.__entries__=[]}
function t (line 44) | function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutati...
function p (line 44) | function p(t){return parseFloat(t)||0}
function v (line 44) | function v(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n...
function m (line 44) | function m(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return h;va...
function y (line 44) | function y(t){return r?g(t)?function(t){var e=t.getBBox();return b(0,0,e...
function b (line 44) | function b(t,e,n,r){return{x:t,y:e,width:n,height:r}}
function t (line 44) | function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentR...
function t (line 44) | function t(t,e,r){if(this.activeObservations_=[],this.observations_=new ...
function e (line 44) | function e(t,e,n,r){this.cm=t,this.options=r;var i={listenForChanges:!1}...
function n (line 44) | function n(t,e,n){return t<=e?t:Math.max(e,t+n)}
function r (line 44) | function r(t){this.message=t}
function e (line 58) | function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{...
function r (line 58) | function r(t){return t&&t.__esModule?t:{default:t}}
function r (line 63) | function r(t,e){0}
function i (line 63) | function i(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}
function f (line 63) | function f(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.spl...
function d (line 63) | function d(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void ...
function p (line 63) | function p(t,e,n,r){var i=r&&r.options.stringifyQuery,o=e.query||{};try{...
function v (line 63) | function v(t){if(Array.isArray(t))return t.map(v);if(t&&"object"==typeof...
function g (line 63) | function g(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var i=t.hash;r...
function y (line 63) | function y(t,e){return e===m?t===e:!!e&&(t.path&&e.path?t.path.replace(h...
function b (line 63) | function b(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t...
function k (line 63) | function k(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.default...
function S (line 63) | function S(t){if(!S.installed||w!==t){S.installed=!0,w=t;var e=function(...
function T (line 63) | function T(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"=...
function E (line 63) | function E(t){return t.replace(/\/\//g,"/")}
function F (line 63) | function F(t,e){for(var n,r=[],i=0,o=0,a="",s=e&&e.delimiter||"/";null!=...
function R (line 63) | function R(t){return encodeURI(t).replace(/[\/?#]/g,function(t){return"%...
function I (line 63) | function I(t){return encodeURI(t).replace(/[?#]/g,function(t){return"%"+...
function W (line 63) | function W(t){for(var e=new Array(t.length),n=0;n<t.length;n++)"object"=...
function H (line 63) | function H(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}
function $ (line 63) | function $(t){return t.replace(/([=!:$\/()])/g,"\\$1")}
function B (line 63) | function B(t,e){return t.keys=e,t}
function z (line 63) | function z(t){return t.sensitive?"":"i"}
function U (line 63) | function U(t,e,n){A(e)||(n=e||n,e=[]);for(var r=(n=n||{}).strict,i=!1!==...
function q (line 63) | function q(t,e,n){return A(e)||(n=e||n,e=[]),n=n||{},t instanceof RegExp...
function G (line 63) | function G(t,e,n){try{return(V[t]||(V[t]=L.compile(t)))(e||{},{pretty:!0...
function X (line 63) | function X(t,e,n,r){var i=e||[],o=n||Object.create(null),a=r||Object.cre...
function K (line 63) | function K(t,e,n,r){var i="string"==typeof t?{path:t}:t;if(i.name||i._no...
function Y (line 63) | function Y(t,e){for(var n in e)t[n]=e[n];return t}
function J (line 63) | function J(t,e){var n=X(t),r=n.pathList,i=n.pathMap,o=n.nameMap;function...
function Z (line 63) | function Z(t,e,n){var r=e.match(t);if(!r)return!1;if(!n)return!0;for(var...
function tt (line 63) | function tt(){window.history.replaceState({key:ft()},""),window.addEvent...
function et (line 63) | function et(t,e,n,r){if(t.app){var i=t.options.scrollBehavior;i&&t.app.$...
function nt (line 63) | function nt(){var t=ft();t&&(Q[t]={x:window.pageXOffset,y:window.pageYOf...
function rt (line 63) | function rt(t){return ot(t.x)||ot(t.y)}
function it (line 63) | function it(t){return{x:ot(t.x)?t.x:window.pageXOffset,y:ot(t.y)?t.y:win...
function ot (line 63) | function ot(t){return"number"==typeof t}
function at (line 63) | function at(t,e){var n="object"==typeof t;if(n&&"string"==typeof t.selec...
function ct (line 63) | function ct(){return lt.now().toFixed(3)}
function ft (line 63) | function ft(){return ut}
function dt (line 63) | function dt(t,e){nt();var n=window.history;try{e?n.replaceState({key:ut}...
function ht (line 63) | function ht(t){dt(t,!0)}
function pt (line 63) | function pt(t,e,n){var r=function(i){i>=t.length?n():t[i]?e(t[i],functio...
function vt (line 63) | function vt(t){return function(e,n,r){var o=!1,a=0,s=null;mt(t,function(...
function mt (line 63) | function mt(t,e){return gt(t.map(function(t){return Object.keys(t.compon...
function gt (line 63) | function gt(t){return Array.prototype.concat.apply([],t)}
function bt (line 63) | function bt(t){var e=!1;return function(){for(var n=[],r=arguments.lengt...
function xt (line 63) | function xt(t,e,n,r){var i=mt(t,function(t,r,i,o){var a=function(t,e){"f...
function Ct (line 63) | function Ct(t,e){if(e)return function(){return t.apply(e,arguments)}}
function e (line 63) | function e(e,n){var r=this;t.call(this,e,n);var i=e.options.scrollBehavi...
function kt (line 63) | function kt(t){var e=window.location.pathname;return t&&0===e.indexOf(t)...
function e (line 63) | function e(e,n,r){t.call(this,e,n),r&&function(t){var e=kt(t);if(!/^\/#/...
function Ot (line 63) | function Ot(){var t=Tt();return"/"===t.charAt(0)||(Lt("/"+t),!1)}
function Tt (line 63) | function Tt(){var t=window.location.href,e=t.indexOf("#");return-1===e?"...
function Et (line 63) | function Et(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e...
function At (line 63) | function At(t){st?dt(Et(t)):window.location.hash=t}
function Lt (line 63) | function Lt(t){st?ht(Et(t)):window.location.replace(Et(t))}
function e (line 63) | function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}
function Pt (line 63) | function Pt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t....
function e (line 63) | function e(e,n){var r=e.getLine(n),i=r.search(/\S/);return-1==i||/\bcomm...
function i (line 63) | function i(t){if("function"!=typeof t)throw new TypeError("executor must...
function y (line 63) | function y(){if(!g){g=!0;var t=navigator.userAgent,e=/(?:MSIE.(\d+\.\d+)...
function r (line 63) | function r(t,e){return function(){t&&t.apply(this,arguments),e&&e.apply(...
function r (line 63) | function r(r,i){return s.type="throw",s.arg=t,e.next=r,i&&(e.method="nex...
function w (line 63) | function w(t,e,n,r){var i=e&&e.prototype instanceof C?e:C,o=Object.creat...
function x (line 63) | function x(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){ret...
function C (line 63) | function C(){}
function _ (line 63) | function _(){}
function k (line 63) | function k(){}
function S (line 63) | function S(t){["next","throw","return"].forEach(function(e){t[e]=functio...
function O (line 63) | function O(t){var e;this._invoke=function(n,r){function o(){return new P...
function T (line 63) | function T(t,e){var r=t.iterator[e.method];if(r===n){if(e.delegate=null,...
function E (line 63) | function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.f...
function A (line 63) | function A(t){var e=t.completion||{};e.type="normal",delete e.arg,t.comp...
function L (line 63) | function L(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.r...
function M (line 63) | function M(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==type...
function N (line 63) | function N(){return{value:n,done:!0}}
function i (line 63) | function i(){this.message="String contains an invalid character"}
function e (line 63) | function e(t,e){function n(t){clearTimeout(r.doRedraw),r.doRedraw=setTim...
function u (line 63) | function u(t,n){if(s!=t.line&&(s=t.line,l=e.getLineHandle(s)),l.widgets&...
function i (line 63) | function i(n){var r=e.getTokenTypeAt(t.Pos(n,0));return r&&/\bheader\b/....
function o (line 63) | function o(t,e,n){var o=e&&e.match(/^#+/);return o&&i(t)?o[0].length:(o=...
function u (line 63) | function u(){for(var t=arguments.length,e=Array(t),n=0;n<t;n++)e[n]=argu...
function c (line 63) | function c(t,e){return void 0===t||null===t||(!("array"!==e||!Array.isAr...
function f (line 63) | function f(t,e,n){var r=0,i=t.length;!function o(a){if(a&&a.length)n(a);...
function d (line 63) | function d(t,e,n,r){if(e.first)return f(function(t){var e=[];return Obje...
function h (line 63) | function h(t){return function(e){return e&&e.message?(e.field=e.field||t...
function p (line 63) | function p(t,e){if(e)for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];"...
function k (line 63) | function k(){return{default:"Validation error on field %s",required:"%s ...
function O (line 63) | function O(t){this.rules=null,this._messages=S,this.define(t)}
function o (line 63) | function o(t,e){return i()({},e,{fullField:n.fullField+"."+t})}
function c (line 63) | function c(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0...
function o (line 63) | function o(t){Array.isArray(t)?r=r.concat.apply(r,t):r.push(t)}
function n (line 63) | function n(t,e){return t.line-e.line||t.ch-e.ch}
function o (line 63) | function o(t,e,n,r){this.line=e,this.ch=n,this.cm=t,this.text=t.getLine(...
function a (line 63) | function a(t,n){var r=t.cm.getTokenTypeAt(e(t.line,n));return r&&/\btag\...
function s (line 63) | function s(t){if(!(t.line>=t.max))return t.ch=0,t.text=t.cm.getLine(++t....
function l (line 63) | function l(t){if(!(t.line<=t.min))return t.text=t.cm.getLine(--t.line),t...
function u (line 63) | function u(t){for(;;){var e=t.text.indexOf(">",t.ch);if(-1==e){if(s(t))c...
function c (line 63) | function c(t){for(;;){var e=t.ch?t.text.lastIndexOf("<",t.ch-1):-1;if(-1...
function f (line 63) | function f(t){for(;;){i.lastIndex=t.ch;var e=i.exec(t.text);if(!e){if(s(...
function d (line 63) | function d(t){for(;;){var e=t.ch?t.text.lastIndexOf(">",t.ch-1):-1;if(-1...
function h (line 63) | function h(t,n){for(var r=[];;){var i,o=f(t),a=t.line,s=t.ch-(o?o[0].len...
function p (line 63) | function p(t,n){for(var r=[];;){var i=d(t);if(!i)return;if("selfClose"!=...
function t (line 70) | function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t]...
function r (line 70) | function r(e,i,o){var a;if("undefined"!=typeof document){if(arguments.le...
function a (line 70) | function a(a){for(var s=n.ch,l=0;;){var u=s<=0?-1:o.lastIndexOf(a,s-1);i...
function r (line 70) | function r(n){if(n<e.firstLine()||n>e.lastLine())return null;var r=e.get...
function r (line 70) | function r(n){if(n<e.firstLine()||n>e.lastLine())return null;var r=e.get...
function o (line 70) | function o(t){return t&&t.__esModule?t:{default:t}}
function i (line 70) | function i(t,e){for(var n=function(t){var e=t.flags;return null!=e?e:(t....
function o (line 70) | function o(t,e,n){e=i(e,"g");for(var o=n.line,a=n.ch,s=t.lastLine();o<=s...
function a (line 70) | function a(t,e){for(var n,r=0;;){e.lastIndex=r;var i=e.exec(t);if(!i)ret...
function s (line 70) | function s(t,e,n,r){if(t.length==e.length)return n;for(var i=0,o=n+Math....
function l (line 70) | function l(t,l,u,c){var f;this.atOccurrence=!1,this.doc=t,u=u?t.clipPos(...
function o (line 70) | function o(t,e){for(var o,a=[],u=0,c=0,f="",d=e&&e.delimiter||n,h=e&&e.d...
function a (line 70) | function a(t){for(var e=new Array(t.length),n=0;n<t.length;n++)"object"=...
function s (line 70) | function s(t){return t.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1")}
function l (line 70) | function l(t){return t.replace(/([=!:$/()])/g,"\\$1")}
function u (line 70) | function u(t){return t&&t.sensitive?"":"i"}
function c (line 70) | function c(t,e,i){for(var o=(i=i||{}).strict,a=!1!==i.start,l=!1!==i.end...
function f (line 70) | function f(t,e,n){return t instanceof RegExp?function(t,e){if(!e)return ...
function a (line 70) | function a(t){return"[object Array]"===o.call(t)}
function s (line 70) | function s(t){return null!==t&&"object"==typeof t}
function l (line 70) | function l(t){return"[object Function]"===o.call(t)}
function u (line 70) | function u(t,e){if(null!==t&&void 0!==t)if("object"!=typeof t&&(t=[t]),a...
function n (line 70) | function n(n,r){"object"==typeof e[r]&&"object"==typeof n?e[r]=t(e[r],n)...
function n (line 70) | function n(t,n){for(var r=t.findMarks(e(n,0),e(n+1,0)),i=0;i<r.length;++...
function r (line 70) | function r(t){if("string"==typeof t){var e=document.createElement("div")...
function i (line 70) | function i(t,i,o){var a=t.state.foldGutter.options,s=i,l=t.foldOption(a,...
function o (line 70) | function o(t){var e=t.getViewport(),n=t.state.foldGutter;n&&(t.operation...
function a (line 70) | function a(t,r,i){var o=t.state.foldGutter;if(o){var a=o.options;if(i==a...
function s (line 70) | function s(t){var e=t.state.foldGutter;if(e){var n=e.options;e.from=e.to...
function l (line 70) | function l(t){var e=t.state.foldGutter;if(e){var n=e.options;clearTimeou...
function u (line 70) | function u(t,e){var n=t.state.foldGutter;if(n){var r=e.line;r>=n.from&&r...
function s (line 70) | function s(t){var e=new o(t),n=i(o.prototype.request,e);return r.extend(...
FILE: src/main/resources/script/propertyOperation.js
function setProp (line 25) | function setProp(req,name,value){
function getProp (line 73) | function getProp(req,name){
function listItem (line 119) | function listItem(list,prop,value){
function getInternalProp (line 130) | function getInternalProp(item,name){
function wait (line 176) | function wait(seconds){
FILE: src/main/resources/script/sendWrapper.js
function send (line 25) | function send(req){
FILE: src/test/java/com/rpcpostman/service/appfind/zk/ZkServiceTest.java
class ZkServiceTest (line 27) | public class ZkServiceTest {
FILE: src/test/java/com/rpcpostman/service/maven/MavenProcessorTest.java
class MavenProcessorTest (line 34) | public class MavenProcessorTest {
method testProcess (line 36) | @Test
FILE: src/test/java/com/rpcpostman/util/XmlUtilTest.java
class XmlUtilTest (line 31) | public class XmlUtilTest {
method test (line 33) | @Test
Condensed preview — 183 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,081K chars).
[
{
"path": ".babelrc",
"chars": 229,
"preview": "{\n \"presets\": [\n [\"env\", {\n \"modules\": false,\n \"targets\": {\n \"browsers\": [\"> 1%\", \"last 2 versions\""
},
{
"path": ".eslintignore",
"chars": 31,
"preview": ".eslintrc.js\nwebpack.config.js\n"
},
{
"path": ".eslintrc.js",
"chars": 1634,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": ".gitignore",
"chars": 34,
"preview": "*.iml\n.idea/\ntarget/\nnode_modules/"
},
{
"path": ".postcssrc.js",
"chars": 1384,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "LICENSE",
"chars": 1071,
"preview": "MIT License\n\nCopyright (c) 2019 everythingbest\n\nPermission is hereby granted, free of charge, to any person obtaining a "
},
{
"path": "README.MD",
"chars": 2477,
"preview": "DUBBO-POSTMAN\n==========\n\n<img src=\"https://github.com/everythingbest/dubbo-postman/blob/master/gif/logo.png?raw=true\" a"
},
{
"path": "build/build.js",
"chars": 2277,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "build/check-versions.js",
"chars": 2502,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "build/dev-client.js",
"chars": 1383,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "build/dev-server.js",
"chars": 3582,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "build/utils.js",
"chars": 3730,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "build/vue-loader.conf.js",
"chars": 1235,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "build/webpack.base.conf.js",
"chars": 3955,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "build/webpack.dev.conf.js",
"chars": 3872,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "build/webpack.prod.conf.js",
"chars": 6627,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "config/dev.env.js",
"chars": 1374,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "config/index.js",
"chars": 4063,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "config/prod.env.js",
"chars": 1300,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "doc/boot-activity.puml",
"chars": 214,
"preview": "@startuml\n(*) --> \"启动\"\n--> \"读取缓存的注册地址\"\n--> \"连接注册中心\"\n--> \"拉取注册数据\"\nIf \"拉取成功\" then\n--> [Yes] \"解析注册数据\"\n--> \"异步注册监听数据项\"\n--> "
},
{
"path": "doc/component.puml",
"chars": 525,
"preview": "@startuml\n\npackage \"scenetest\" {\n[SceneTester]\n}\n\npackage \"rpcrequest\" {\n[Rpcrequest]\n}\n\npackage \"context\" {\n[InvokeCont"
},
{
"path": "doc/create-activity.puml",
"chars": 332,
"preview": "@startuml\n\n\n(*) --> \"创建服务\"\n--> \"1.根据请求的参数里面的服务元数据从\\n服务模型表里提取对应的服务模型\"\n--> \"2.从nexus下载api.jar和api.pom\"\n--> \"3.通过embededmav"
},
{
"path": "doc/projectStructure",
"chars": 58,
"preview": "1.按层封装 水平划分\n2.按功能封装 垂直划分\n3.按领域封装 环装---六边型架构\n4.按组件封装 组件独立"
},
{
"path": "doc/request-activity.puml",
"chars": 312,
"preview": "@startuml\n(*) --> \"请求服务\"\n--> \"反序列化json格式string为map\"\n--> \"根据请求参数里面的服务名称从服务\\n模型表里提取服务模型\"\n--> \"判断服务模型是否已经动态加载过\"\nIf \"没有加载\" "
},
{
"path": "doc/rpc-postman.uml",
"chars": 3480,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Diagram>\n <ID>JAVA</ID>\n <OriginalElement>com.dubbo.postman.service.registry.R"
},
{
"path": "doc/usecase.puml",
"chars": 406,
"preview": "@startuml\n\nUser --> (注册中心) : 添加注册地址\n(注册中心) --> (拉取注册数据) : 《包括》\n(注册中心) --> (监听注册数据) : 《包括》\n(注册中心) --> (转换注册数据) : 《包括》\n\nne"
},
{
"path": "index.html",
"chars": 1421,
"preview": "<!--\n ~ MIT License\n ~\n ~ Copyright (c) 2019 everythingbest\n ~\n ~ Permission is hereby granted, free of charge, to "
},
{
"path": "package.json",
"chars": 2931,
"preview": "{\n \"name\": \"dubbo-postman-ui\",\n \"description\": \"dubbo-postman-ui static resources\",\n \"scripts\": {\n \"dev\": \"webpack"
},
{
"path": "pom.xml",
"chars": 8697,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ MIT License\n ~\n ~ Copyright (c) 2019 everythingbest\n ~\n ~ Permission"
},
{
"path": "src/main/frontend/App.vue",
"chars": 1638,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/api/access.js",
"chars": 2586,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/api/associationCase.js",
"chars": 1824,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/api/caseRun.js",
"chars": 1325,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/api/common.js",
"chars": 1451,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/api/config.js",
"chars": 1601,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/api/create.js",
"chars": 1607,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/api/testCase.js",
"chars": 2109,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/components/BackToTop/index.vue",
"chars": 3906,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/components/Breadcrumb/index.vue",
"chars": 2972,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/components/GithubCorner/index.vue",
"chars": 2909,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/components/Hamburger/index.vue",
"chars": 2982,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/components/ScrollPane/index.vue",
"chars": 3514,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/components/SvgIcon/index.vue",
"chars": 1836,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/icons/index.js",
"chars": 1419,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/icons/svgo.yml",
"chars": 248,
"preview": "# replace default config\n\n# multipass: true\n# full: true\n\nplugins:\n\n # - name\n #\n # or:\n # - name: false\n # - name:"
},
{
"path": "src/main/frontend/main.js",
"chars": 3681,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/mock/access.js",
"chars": 2605,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/mock/associationCase.js",
"chars": 2988,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/mock/caseRun.js",
"chars": 1477,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/mock/common.js",
"chars": 1362,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/mock/config.js",
"chars": 1758,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/mock/create.js",
"chars": 1687,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/mock/index.js",
"chars": 3614,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/mock/testCase.js",
"chars": 4742,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/router/index.js",
"chars": 3993,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/store/getters.js",
"chars": 1363,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/store/index.js",
"chars": 1840,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/store/modules/app.js",
"chars": 2177,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/store/modules/tagsView.js",
"chars": 5275,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/styles/element-ui.scss",
"chars": 1586,
"preview": "/*!\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any pe"
},
{
"path": "src/main/frontend/styles/index.scss",
"chars": 2192,
"preview": "/*!\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any pe"
},
{
"path": "src/main/frontend/styles/mixin.scss",
"chars": 1522,
"preview": "/*!\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any pe"
},
{
"path": "src/main/frontend/styles/sidebar.scss",
"chars": 3928,
"preview": "/*!\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any pe"
},
{
"path": "src/main/frontend/styles/transition.scss",
"chars": 1826,
"preview": "/*!\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any pe"
},
{
"path": "src/main/frontend/styles/variables.scss",
"chars": 1206,
"preview": "/*!\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any pe"
},
{
"path": "src/main/frontend/utils/formatting.js",
"chars": 5631,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/utils/get-page-title.js",
"chars": 1347,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/utils/index.js",
"chars": 2721,
"preview": "\n/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any pe"
},
{
"path": "src/main/frontend/utils/request.js",
"chars": 2320,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/views/error-page/401.vue",
"chars": 3153,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/error-page/404.vue",
"chars": 6093,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/layout/Layout.vue",
"chars": 2797,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/layout/components/AppMain.vue",
"chars": 2045,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/layout/components/Navbar.vue",
"chars": 6564,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/layout/components/Sidebar/Item.vue",
"chars": 1631,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/layout/components/Sidebar/Link.vue",
"chars": 1802,
"preview": "\n<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to"
},
{
"path": "src/main/frontend/views/layout/components/Sidebar/Logo.vue",
"chars": 2877,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/layout/components/Sidebar/SidebarItem.vue",
"chars": 3989,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/layout/components/Sidebar/index.vue",
"chars": 2104,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/layout/components/TagsView.vue",
"chars": 7187,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/layout/components/index.js",
"chars": 1326,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/views/layout/mixin/ResizeHandler.js",
"chars": 2114,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/frontend/views/pages/AccessService.vue",
"chars": 39224,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/pages/CaseManage.vue",
"chars": 37135,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/pages/CreateService.vue",
"chars": 8234,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/pages/SystemConfig.vue",
"chars": 5500,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/frontend/views/redirect/index.vue",
"chars": 1457,
"preview": "<!--\n - MIT License\n -\n - Copyright (c) 2019 everythingbest\n -\n - Permission is hereby granted, free of charge, to "
},
{
"path": "src/main/java/com/rpcpostman/Main.java",
"chars": 1946,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/config/AppConfig.java",
"chars": 2435,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/config/Initializer.java",
"chars": 5896,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/config/RedisConfig.java",
"chars": 3155,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/config/SessionExpireEntryPoint.java",
"chars": 3139,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/config/WebSecurityConfig.java",
"chars": 5872,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/controller/AbstractController.java",
"chars": 2621,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/controller/RpcPostmanClusterController.java",
"chars": 4694,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/controller/RpcPostmanHomeController.java",
"chars": 1486,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/controller/RpcPostmanProxyController.java",
"chars": 3224,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/controller/RpcPostmanSceneTestController.java",
"chars": 4867,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/controller/RpcPostmanSceneTestRunnerController.java",
"chars": 3255,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/controller/RpcPostmanServiceCreationController.java",
"chars": 4619,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/controller/RpcPostmanServiceQueryController.java",
"chars": 8806,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/controller/RpcPostmanTestCaseController.java",
"chars": 7551,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/dto/AbstractCaseDto.java",
"chars": 1318,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/dto/SceneCaseDto.java",
"chars": 1427,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/dto/UserCaseDto.java",
"chars": 1577,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/dto/UserCaseGroupDto.java",
"chars": 1418,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/dto/WebApiRspDto.java",
"chars": 5185,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/security/UserDetails.java",
"chars": 2643,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/security/UserDetailsService.java",
"chars": 2313,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/security/entity/RoleType.java",
"chars": 2053,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/security/entity/User.java",
"chars": 1710,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/security/user/UserService.java",
"chars": 1495,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/security/user/impl/UserServiceImpl.java",
"chars": 3744,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/GAV.java",
"chars": 1319,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/Pair.java",
"chars": 1489,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/context/InvokeContext.java",
"chars": 4968,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/Creator.java",
"chars": 1467,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/entity/DubboPostmanService.java",
"chars": 2316,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/entity/GrpcPostmanService.java",
"chars": 1832,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/entity/InterfaceEntity.java",
"chars": 1866,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/entity/MethodEntity.java",
"chars": 1620,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/entity/ParamEntity.java",
"chars": 1317,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/entity/PostmanService.java",
"chars": 1531,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/entity/RequestParam.java",
"chars": 1538,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/impl/DubboCreator.java",
"chars": 6705,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/creation/impl/GrpcCreator.java",
"chars": 1630,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/Converter.java",
"chars": 1565,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/Invocation.java",
"chars": 1569,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/Invoker.java",
"chars": 1580,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/ResponseCode.java",
"chars": 1587,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/entity/DubboInvocation.java",
"chars": 1912,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/entity/DubboParamValue.java",
"chars": 2380,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/entity/PostmanDubboRequest.java",
"chars": 2728,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/entity/PostmanRequest.java",
"chars": 1260,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/entity/RpcParamValue.java",
"chars": 1259,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/exception/ParamException.java",
"chars": 1549,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/impl/DubboConverter.java",
"chars": 4262,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/impl/DubboInvoker.java",
"chars": 6576,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/invocation/impl/GrpcInvoker.java",
"chars": 1781,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/load/Loader.java",
"chars": 1239,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/load/classloader/ApiJarClassLoader.java",
"chars": 2349,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/load/impl/JarLocalFileLoader.java",
"chars": 7367,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/load/impl/JarUrlFileLoader.java",
"chars": 1312,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/maven/Maven.java",
"chars": 7427,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/registry/Register.java",
"chars": 1420,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/registry/RegisterFactory.java",
"chars": 1323,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/registry/entity/InterfaceMetaInfo.java",
"chars": 1697,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/registry/impl/AbstractRegisterFactory.java",
"chars": 2139,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/registry/impl/DubboRegisterFactory.java",
"chars": 2053,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/registry/impl/RedisRegister.java",
"chars": 1575,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/registry/impl/ZkRegister.java",
"chars": 7307,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/repository/Repository.java",
"chars": 1248,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/repository/redis/RedisKeys.java",
"chars": 1671,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/repository/redis/RedisRepository.java",
"chars": 2760,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/scenetest/JSEngine.java",
"chars": 3496,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/service/scenetest/SceneTester.java",
"chars": 2794,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/util/BuildUtil.java",
"chars": 4098,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/util/Constant.java",
"chars": 1472,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/util/ExceptionHelper.java",
"chars": 1623,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/util/FileWithString.java",
"chars": 4132,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/util/JSON.java",
"chars": 3180,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/util/LogResultPrintStream.java",
"chars": 1808,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/java/com/rpcpostman/util/XmlUtil.java",
"chars": 2980,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/resources/application.properties",
"chars": 1683,
"preview": "#\n# MIT License\n#\n# Copyright (c) 2019 everythingbest\n#\n# Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "src/main/resources/config/setting.xml",
"chars": 7583,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!--\n ~ MIT License\n ~\n ~ Copyright (c) 2019 everythingbest\n "
},
{
"path": "src/main/resources/logback.xml",
"chars": 3717,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<!--\n ~ MIT License\n ~\n ~ Copyright (c) 2019 everythingbest\n ~\n ~ Permissio"
},
{
"path": "src/main/resources/public/index.html",
"chars": 3750,
"preview": "<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>R"
},
{
"path": "src/main/resources/public/static/css/app.c775b29c.css",
"chars": 23360,
"preview": "/*!\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any pe"
},
{
"path": "src/main/resources/public/static/css/chunk-21b7.d9ef3e45.css",
"chars": 4748,
"preview": ".wscn-http404-container[data-v-65589b6d]{-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:"
},
{
"path": "src/main/resources/public/static/css/chunk-4c13.f6ea9576.css",
"chars": 745,
"preview": ".errPage-container[data-v-08656296]{width:800px;max-width:100%;margin:100px auto}.errPage-container .pan-back-btn[data-v"
},
{
"path": "src/main/resources/public/static/css/chunk-elementUI.bb0f370d.css",
"chars": 207200,
"preview": ".el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-pagination--small .arrow.disable"
},
{
"path": "src/main/resources/public/static/css/chunk-libs.2c094f17.css",
"chars": 48179,
"preview": "/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/lice"
},
{
"path": "src/main/resources/public/static/js/app.713c0695.js",
"chars": 143436,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[\"app\"],{\"+4i/\":function(e,t,a){\"use strict\";var n=a(\"nvjJ\");a.n(n)."
},
{
"path": "src/main/resources/public/static/js/chunk-21b7.2f464e06.js",
"chars": 7825,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[\"chunk-21b7\"],{\"1D2I\":function(s,t,i){\"use strict\";i.r(t);var n=[fu"
},
{
"path": "src/main/resources/public/static/js/chunk-4c13.9e346bf2.js",
"chars": 1630,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[\"chunk-4c13\"],{\"95ol\":function(t,i,a){},HZcd:function(t,i,a){\"use s"
},
{
"path": "src/main/resources/public/static/js/chunk-elementUI.753a79b5.js",
"chars": 579159,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[\"chunk-elementUI\"],{\"05c+\":function(e,t,i){\"use strict\";t.__esModul"
},
{
"path": "src/main/resources/public/static/js/chunk-libs.b46743d1.js",
"chars": 446641,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[\"chunk-libs\"],{\"+JPL\":function(t,e,n){t.exports={default:n(\"+SFK\"),"
},
{
"path": "src/main/resources/public/static/js/cs1M.3da5a21a.js",
"chars": 372,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[\"cs1M\"],{cs1M:function(e,r,n){\"use strict\";n.r(r);var t={beforeCrea"
},
{
"path": "src/main/resources/script/propertyOperation.js",
"chars": 4776,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/main/resources/script/sendWrapper.js",
"chars": 1370,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/test/java/com/rpcpostman/service/appfind/zk/ZkServiceTest.java",
"chars": 1924,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/test/java/com/rpcpostman/service/maven/MavenProcessorTest.java",
"chars": 2307,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
},
{
"path": "src/test/java/com/rpcpostman/util/XmlUtilTest.java",
"chars": 1638,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2019 everythingbest\n *\n * Permission is hereby granted, free of charge, to any per"
}
]
About this extraction
This page contains the full source code of the everythingbest/dubbo-postman GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 183 files (1.9 MB), approximately 605.8k tokens, and a symbol index with 1377 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.