vercerl-express-test 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/eslint.config.js +20 -0
- package/frontEnd/package-lock.json +18392 -0
- package/frontEnd/package.json +47 -0
- package/frontEnd/public/.gitkeep +0 -0
- package/frontEnd/public/index.html +17 -0
- package/frontEnd/src/App.vue +69 -0
- package/frontEnd/src/api/mock.js +5 -0
- package/frontEnd/src/assets/.gitkeep +0 -0
- package/frontEnd/src/components/AppMenu.vue +86 -0
- package/frontEnd/src/main.js +14 -0
- package/frontEnd/src/pages/LineChartPage.vue +573 -0
- package/frontEnd/src/pages/MedalIssueDialog.vue +558 -0
- package/frontEnd/src/pages/MedalSetting.vue +571 -0
- package/frontEnd/src/router/index.js +12 -0
- package/frontEnd/src/router/routes.js +29 -0
- package/frontEnd/src/utils/request.js +28 -0
- package/frontEnd/vue.config.js +8 -0
- package/package.json +53 -0
- package/src/app.ts +88 -0
- package/src/controllers/health.controller.ts +14 -0
- package/src/controllers/medal.controller.ts +46 -0
- package/src/controllers/mock.controller.ts +41 -0
- package/src/middlewares/response.middleware.ts +71 -0
- package/src/routes/api.route.ts +13 -0
- package/src/routes/index.route.ts +5 -0
- package/src/routes/modules/health.route.ts +8 -0
- package/src/routes/modules/medal.route.ts +10 -0
- package/src/routes/modules/mock.route.ts +9 -0
- package/src/services/medal.service.ts +159 -0
- package/src/services/mock.service.ts +46 -0
- package/src/utils/httpError.ts +13 -0
- package/test/health.test.js +12 -0
- package/test/trend.test.js +30 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vue2-app",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"serve": "vue-cli-service serve",
|
|
7
|
+
"build": "vue-cli-service build",
|
|
8
|
+
"lint": "vue-cli-service lint"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"axios": "^1.13.2",
|
|
12
|
+
"core-js": "^3.6.5",
|
|
13
|
+
"echarts": "^5.5.1",
|
|
14
|
+
"element-ui": "^2.15.14",
|
|
15
|
+
"sortablejs": "^1.15.6",
|
|
16
|
+
"vue": "^2.6.11",
|
|
17
|
+
"vue-router": "^3.6.5"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@vue/cli-plugin-babel": "~4.5.0",
|
|
21
|
+
"@vue/cli-plugin-eslint": "~4.5.0",
|
|
22
|
+
"@vue/cli-service": "~4.5.0",
|
|
23
|
+
"babel-eslint": "^10.1.0",
|
|
24
|
+
"eslint": "^6.7.2",
|
|
25
|
+
"eslint-plugin-vue": "^6.2.2",
|
|
26
|
+
"vue-template-compiler": "^2.6.11"
|
|
27
|
+
},
|
|
28
|
+
"eslintConfig": {
|
|
29
|
+
"root": true,
|
|
30
|
+
"env": {
|
|
31
|
+
"node": true
|
|
32
|
+
},
|
|
33
|
+
"extends": [
|
|
34
|
+
"plugin:vue/essential",
|
|
35
|
+
"eslint:recommended"
|
|
36
|
+
],
|
|
37
|
+
"parserOptions": {
|
|
38
|
+
"parser": "babel-eslint"
|
|
39
|
+
},
|
|
40
|
+
"rules": {}
|
|
41
|
+
},
|
|
42
|
+
"browserslist": [
|
|
43
|
+
"> 1%",
|
|
44
|
+
"last 2 versions",
|
|
45
|
+
"not dead"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
6
|
+
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
7
|
+
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
|
8
|
+
<title><%= htmlWebpackPlugin.options.title %></title>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<noscript>
|
|
12
|
+
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
|
13
|
+
</noscript>
|
|
14
|
+
<div id="app"></div>
|
|
15
|
+
<!-- built files will be auto injected -->
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div id="app">
|
|
3
|
+
<div class="layout">
|
|
4
|
+
<div class="layout-menu" :style="{ width: isMenuCollapsed ? collapsedMenuWidth : expandedMenuWidth }">
|
|
5
|
+
<div class="menu-header">
|
|
6
|
+
<el-button
|
|
7
|
+
class="menu-toggle"
|
|
8
|
+
type="text"
|
|
9
|
+
@click="isMenuCollapsed = !isMenuCollapsed"
|
|
10
|
+
>
|
|
11
|
+
<i :class="isMenuCollapsed ? 'el-icon-s-unfold' : 'el-icon-s-fold'"></i>
|
|
12
|
+
</el-button>
|
|
13
|
+
</div>
|
|
14
|
+
<AppMenu :collapse="isMenuCollapsed" />
|
|
15
|
+
</div>
|
|
16
|
+
<div class="layout-content">
|
|
17
|
+
<router-view />
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script>
|
|
24
|
+
import AppMenu from './components/AppMenu.vue'
|
|
25
|
+
|
|
26
|
+
export default {
|
|
27
|
+
name: 'App',
|
|
28
|
+
data() {
|
|
29
|
+
return {
|
|
30
|
+
isMenuCollapsed: true,
|
|
31
|
+
collapsedMenuWidth: '64px',
|
|
32
|
+
expandedMenuWidth: '180px'
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
components: {
|
|
36
|
+
AppMenu
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<style>
|
|
42
|
+
.layout {
|
|
43
|
+
display: flex;
|
|
44
|
+
min-height: 100vh;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.layout-menu {
|
|
48
|
+
border-right: 1px solid #ebeef5;
|
|
49
|
+
transition: width 0.15s ease;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.layout-content {
|
|
53
|
+
flex: 1;
|
|
54
|
+
min-width: 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.menu-header {
|
|
58
|
+
height: 48px;
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
justify-content: flex-end;
|
|
62
|
+
padding: 0 8px;
|
|
63
|
+
border-bottom: 1px solid #ebeef5;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.menu-toggle {
|
|
67
|
+
padding: 8px;
|
|
68
|
+
}
|
|
69
|
+
</style>
|
|
File without changes
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-menu
|
|
3
|
+
:class="['menu', { 'menu--collapsed': collapse }]"
|
|
4
|
+
:default-active="$route.path"
|
|
5
|
+
:collapse="collapse"
|
|
6
|
+
:collapse-transition="false"
|
|
7
|
+
router
|
|
8
|
+
>
|
|
9
|
+
<template v-for="item in menuRoutes">
|
|
10
|
+
<el-submenu
|
|
11
|
+
v-if="hasChildren(item)"
|
|
12
|
+
:key="item.path + '-submenu'"
|
|
13
|
+
:index="item.path"
|
|
14
|
+
>
|
|
15
|
+
<template slot="title">
|
|
16
|
+
<i :class="getIcon(item)"></i>
|
|
17
|
+
<span class="menu-title-text">{{ getTitle(item) }}</span>
|
|
18
|
+
</template>
|
|
19
|
+
<el-menu-item
|
|
20
|
+
v-for="child in getChildren(item)"
|
|
21
|
+
:key="child.path"
|
|
22
|
+
:index="child.path"
|
|
23
|
+
>
|
|
24
|
+
<i :class="getIcon(child)"></i>
|
|
25
|
+
<span class="menu-title-text">{{ getTitle(child) }}</span>
|
|
26
|
+
</el-menu-item>
|
|
27
|
+
</el-submenu>
|
|
28
|
+
|
|
29
|
+
<el-menu-item
|
|
30
|
+
v-else
|
|
31
|
+
:key="item.path + '-item'"
|
|
32
|
+
:index="item.path"
|
|
33
|
+
>
|
|
34
|
+
<i :class="getIcon(item)"></i>
|
|
35
|
+
<span class="menu-title-text">{{ getTitle(item) }}</span>
|
|
36
|
+
</el-menu-item>
|
|
37
|
+
</template>
|
|
38
|
+
</el-menu>
|
|
39
|
+
</template>
|
|
40
|
+
|
|
41
|
+
<script>
|
|
42
|
+
import { routes } from '../router/routes'
|
|
43
|
+
|
|
44
|
+
export default {
|
|
45
|
+
name: 'AppMenu',
|
|
46
|
+
props: {
|
|
47
|
+
collapse: {
|
|
48
|
+
type: Boolean,
|
|
49
|
+
default: false
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
computed: {
|
|
53
|
+
menuRoutes() {
|
|
54
|
+
return routes.filter(r => this.isMenuVisible(r))
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
methods: {
|
|
58
|
+
isMenuVisible(route) {
|
|
59
|
+
return route && route.meta && route.meta.showInMenu === true
|
|
60
|
+
},
|
|
61
|
+
getTitle(route) {
|
|
62
|
+
return (route && route.meta && route.meta.title) || route.name || route.path
|
|
63
|
+
},
|
|
64
|
+
getIcon(route) {
|
|
65
|
+
return (route && route.meta && route.meta.icon) || 'el-icon-menu'
|
|
66
|
+
},
|
|
67
|
+
getChildren(route) {
|
|
68
|
+
if (!route || !Array.isArray(route.children)) return []
|
|
69
|
+
return route.children.filter(r => this.isMenuVisible(r))
|
|
70
|
+
},
|
|
71
|
+
hasChildren(route) {
|
|
72
|
+
return this.getChildren(route).length > 0
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<style>
|
|
79
|
+
.menu {
|
|
80
|
+
height: 100%;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.menu--collapsed .menu-title-text {
|
|
84
|
+
display: none;
|
|
85
|
+
}
|
|
86
|
+
</style>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
import App from './App.vue'
|
|
3
|
+
|
|
4
|
+
import ElementUI from 'element-ui'
|
|
5
|
+
import 'element-ui/lib/theme-chalk/index.css'
|
|
6
|
+
import router from './router'
|
|
7
|
+
|
|
8
|
+
Vue.config.productionTip = false
|
|
9
|
+
Vue.use(ElementUI)
|
|
10
|
+
|
|
11
|
+
new Vue({
|
|
12
|
+
router,
|
|
13
|
+
render: h => h(App)
|
|
14
|
+
}).$mount('#app')
|