@misstalor17/elpis 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.
Files changed (84) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc +56 -0
  3. package/README.md +6 -0
  4. package/app/controller/base.js +43 -0
  5. package/app/controller/business.js +121 -0
  6. package/app/controller/project.js +75 -0
  7. package/app/controller/view.js +24 -0
  8. package/app/extend/logger.js +37 -0
  9. package/app/middleware/api-params-verify.js +70 -0
  10. package/app/middleware/api-sign-verify.js +31 -0
  11. package/app/middleware/error-handler.js +32 -0
  12. package/app/middleware/project-handler.js +28 -0
  13. package/app/middleware.js +44 -0
  14. package/app/pages/asserts/custom.css +12 -0
  15. package/app/pages/boot.js +45 -0
  16. package/app/pages/common/curl.js +96 -0
  17. package/app/pages/common/utils.js +2 -0
  18. package/app/pages/dashboard/complex-view/header-view/complex-view/sub-menu.vue +22 -0
  19. package/app/pages/dashboard/complex-view/header-view/header-view.vue +106 -0
  20. package/app/pages/dashboard/complex-view/iframe-view/iframe-view.vue +45 -0
  21. package/app/pages/dashboard/complex-view/schema-view/complex-view/search-panel/search-panel.vue +33 -0
  22. package/app/pages/dashboard/complex-view/schema-view/complex-view/table-panel/table-panel.vue +105 -0
  23. package/app/pages/dashboard/complex-view/schema-view/components/component-config.js +23 -0
  24. package/app/pages/dashboard/complex-view/schema-view/components/create-form/create-form.vue +85 -0
  25. package/app/pages/dashboard/complex-view/schema-view/components/detail-panel/detail-panel.vue +90 -0
  26. package/app/pages/dashboard/complex-view/schema-view/components/edit-form/edit-form.vue +113 -0
  27. package/app/pages/dashboard/complex-view/schema-view/hook/schema.js +109 -0
  28. package/app/pages/dashboard/complex-view/schema-view/schema-view.vue +66 -0
  29. package/app/pages/dashboard/complex-view/sider-view/complex-view/sub-menu/sub-menu.vue +17 -0
  30. package/app/pages/dashboard/complex-view/sider-view/sider-view.vue +116 -0
  31. package/app/pages/dashboard/dashboard.vue +96 -0
  32. package/app/pages/dashboard/entry.dashboard.js +45 -0
  33. package/app/pages/store/index.js +3 -0
  34. package/app/pages/store/menu.js +60 -0
  35. package/app/pages/store/project.js +17 -0
  36. package/app/pages/widgets/header-container/asserts/logo.png +0 -0
  37. package/app/pages/widgets/header-container/asserts/user.png +0 -0
  38. package/app/pages/widgets/header-container/header-container.vue +105 -0
  39. package/app/pages/widgets/schema-form/complex-view/input/input.vue +120 -0
  40. package/app/pages/widgets/schema-form/complex-view/input-number/input-number.vue +121 -0
  41. package/app/pages/widgets/schema-form/complex-view/select/select.vue +106 -0
  42. package/app/pages/widgets/schema-form/form-item-config.js +20 -0
  43. package/app/pages/widgets/schema-form/schema-form.vue +122 -0
  44. package/app/pages/widgets/schema-search-bar/complex-view/date-range/date-range.vue +42 -0
  45. package/app/pages/widgets/schema-search-bar/complex-view/dynamic-select/dynamic-select.vue +55 -0
  46. package/app/pages/widgets/schema-search-bar/complex-view/input/input.vue +37 -0
  47. package/app/pages/widgets/schema-search-bar/complex-view/select/select.vue +41 -0
  48. package/app/pages/widgets/schema-search-bar/schema-search-bar.vue +109 -0
  49. package/app/pages/widgets/schema-search-bar/search-item-config.js +23 -0
  50. package/app/pages/widgets/schema-table/schema.table.vue +191 -0
  51. package/app/pages/widgets/sider-container/sider-container.vue +34 -0
  52. package/app/public/static/logo.png +0 -0
  53. package/app/public/static/normalize.css +240 -0
  54. package/app/router/business.js +9 -0
  55. package/app/router/project.js +6 -0
  56. package/app/router/view.js +13 -0
  57. package/app/router-schema/business.js +82 -0
  58. package/app/router-schema/project.js +31 -0
  59. package/app/service/base.js +13 -0
  60. package/app/service/project.js +40 -0
  61. package/app/view/entry.tpl +25 -0
  62. package/app/webpack/config/webpack.base.js +204 -0
  63. package/app/webpack/config/webpack.dev.js +56 -0
  64. package/app/webpack/config/webpack.prod.js +116 -0
  65. package/app/webpack/dev.js +52 -0
  66. package/app/webpack/libs/blank.js +1 -0
  67. package/app/webpack/prod.js +17 -0
  68. package/config/config.default.js +3 -0
  69. package/docs/dashboard-model.js +143 -0
  70. package/elpis-core/env.js +23 -0
  71. package/elpis-core/index.js +93 -0
  72. package/elpis-core/loader/config.js +52 -0
  73. package/elpis-core/loader/controller.js +61 -0
  74. package/elpis-core/loader/extend.js +52 -0
  75. package/elpis-core/loader/middleware.js +61 -0
  76. package/elpis-core/loader/router-schema.js +46 -0
  77. package/elpis-core/loader/router.js +43 -0
  78. package/elpis-core/loader/service.js +61 -0
  79. package/index.js +38 -0
  80. package/model/buiness/model.js +200 -0
  81. package/model/index.js +93 -0
  82. package/npminstall-debug.log +218 -0
  83. package/package.json +92 -0
  84. package/test/controller/project.test.js +194 -0
@@ -0,0 +1,194 @@
1
+ const assert = require('assert')
2
+ const supertest = require('supertest')
3
+ const md5 = require('md5')
4
+ const eplisCore = require('../../elpis-core')
5
+ const signKey = 'AShdahsdoahdsoanjsdoaiuhd13'
6
+ const st = Date.now()
7
+
8
+ describe('测试 project 相关结构', function () {
9
+ this.timeout(60000);
10
+
11
+ let modelList
12
+ const projectList = []
13
+ let request;
14
+
15
+ it('启动服务', async () => {
16
+ const app = await eplisCore.start();
17
+ modelList = require('../../model/index')(app)
18
+ modelList.forEach(modelItem => {
19
+ const { project } = modelItem
20
+ for (const pKey in project) {
21
+ projectList.push(project[pKey])
22
+ }
23
+ })
24
+
25
+ request = supertest(app.listen())
26
+ })
27
+
28
+ it('GET /api/project without proj_key', async () => {
29
+ let tmpRequest = request.get('/api/project');
30
+ tmpRequest = tmpRequest.set('s_t', st)
31
+ tmpRequest = tmpRequest.set('s_sign', md5(`${signKey}_${st}`))
32
+ const res = await tmpRequest;
33
+ assert(res.body.success === false);
34
+ const resBody = res.body
35
+ assert(resBody.code === 442)
36
+ assert(resBody.message.indexOf("request vaildate fail: data should have required property 'proj_key'") > -1)
37
+
38
+ })
39
+ it('GET /api/project fail', async () => {
40
+ let tmpRequest = request.get('/api/project');
41
+ tmpRequest = tmpRequest.set('s_t', st)
42
+ tmpRequest = tmpRequest.set('s_sign', md5(`${signKey}_${st}`))
43
+ tmpRequest = tmpRequest.query({
44
+ proj_key: 'xxxxxxxx'
45
+ })
46
+ const res = await tmpRequest;
47
+ assert(res.body.success === false);
48
+ const resBody = res.body
49
+ assert(resBody.code === 50000)
50
+ assert(resBody.message === '获取项目异常')
51
+ })
52
+ it('GET /api/project with proj_key', async () => {
53
+ for (let i = 0; i < projectList.length; i++) {
54
+ const projItem = projectList[i]
55
+ const { key: projKey } = projItem
56
+ console.log(`--------- GET /api/project with proj_key:${projKey}`);
57
+ let tmpRequest = request.get('/api/project');
58
+ tmpRequest = tmpRequest.set('s_t', st)
59
+ tmpRequest = tmpRequest.set('s_sign', md5(`${signKey}_${st}`))
60
+ tmpRequest = tmpRequest.query({
61
+ proj_key: projKey
62
+ })
63
+ const res = await tmpRequest;
64
+ assert(res.body.success === true);
65
+ const resData = res.body.data
66
+ assert(resData.key === projKey)
67
+ assert(resData.modelKey)
68
+ assert(resData.name)
69
+ assert(resData.desc !== undefined)
70
+ assert(resData.homePage !== undefined)
71
+
72
+ const { menu } = resData
73
+ menu.forEach(menuItem => {
74
+ checkMenuItem(menuItem)
75
+ })
76
+ }
77
+
78
+ //检查menu菜单
79
+ function checkMenuItem(menuItem) {
80
+ console.log('--------- GET /api/project with proj_key - menuKey', menuItem.key);
81
+ assert(menuItem.key)
82
+ assert(menuItem.name)
83
+ assert(menuItem.menuType)
84
+ if (menuItem.menuType === 'group') {
85
+ assert(menuItem.subMenu !== undefined)
86
+ menuItem.subMenu.forEach(subMenuItem => {
87
+ checkMenuItem(subMenuItem)
88
+ })
89
+
90
+ }
91
+ if (menuItem.menuType === 'module') {
92
+ checkModule(menuItem)
93
+ }
94
+ }
95
+ //检查module菜单
96
+ function checkModule(menuItme) {
97
+ const { moduleType } = menuItme
98
+ assert(moduleType)
99
+
100
+ if (moduleType === 'sider') {
101
+ const { siderConfig } = menuItme
102
+ assert(siderConfig)
103
+ assert(siderConfig.menu)
104
+ siderConfig.menu.forEach(sideMenuItem => {
105
+ checkMenuItem(sideMenuItem)
106
+ })
107
+ }
108
+ if (moduleType === 'iframe') {
109
+ const { iframeConfig } = menuItme;
110
+ assert(iframeConfig)
111
+ assert(iframeConfig.path !== undefined)
112
+ }
113
+ if (moduleType === 'custom') {
114
+ const { customConfig } = menuItme;
115
+ assert(customConfig)
116
+ assert(customConfig.path !== undefined)
117
+ }
118
+ if (moduleType === 'schema') {
119
+ const { schemaConfig } = menuItme;
120
+ assert(schemaConfig)
121
+ assert(schemaConfig.api !== undefined)
122
+ assert(schemaConfig.schema)
123
+ }
124
+ }
125
+
126
+ })
127
+
128
+
129
+ it('GET /api/project/list without proj_key', async () => {
130
+ let tmpRequest = request.get('/api/project/list');
131
+ tmpRequest = tmpRequest.set('s_t', st)
132
+ tmpRequest = tmpRequest.set('s_sign', md5(`${signKey}_${st}`))
133
+ const res = await tmpRequest;
134
+ assert(res.body.success === true);
135
+
136
+ const resData = res.body.data;
137
+ if (resData.length === projectList.length) {
138
+ for (let i = 0; i < resData.length; i++) {
139
+ const item = resData[i]
140
+ assert(item.modelKey)
141
+ assert(item.key)
142
+ assert(item.name)
143
+ assert(item.desc !== undefined)
144
+ assert(item.homePage !== undefined)
145
+ }
146
+ }
147
+ })
148
+ it('GET /api/project/list with proj_key', async () => {
149
+ const { key: projKey } = projectList[Math.floor(Math.random() * projectList.length)]
150
+ console.log(`--------- GET /api/project/list with proj_key:${projKey}`);
151
+ const { modelKey } = projectList.find(item => item.key === projKey)
152
+
153
+ let tmpRequest = request.get('/api/project/list');
154
+ tmpRequest = tmpRequest.set('s_t', st)
155
+ tmpRequest = tmpRequest.set('s_sign', md5(`${signKey}_${st}`))
156
+ tmpRequest = tmpRequest.query({
157
+ proj_key: projKey
158
+ })
159
+ const res = await tmpRequest;
160
+ assert(res.body.success === true);
161
+
162
+ const resData = res.body.data;
163
+ assert(projectList.filter(item => item.modelKey === modelKey).length === resData.length);
164
+ for (let i = 0; i < resData.length; i++) {
165
+ const item = resData[i]
166
+ assert(item.modelKey)
167
+ assert(item.key)
168
+ assert(item.name)
169
+ assert(item.desc !== undefined)
170
+ assert(item.homePage !== undefined)
171
+ }
172
+ })
173
+
174
+ it('GET /api/project/model_list', async () => {
175
+ let tmpRequest = request.get('/api/project/model_list');
176
+ tmpRequest = tmpRequest.set('s_t', st)
177
+ tmpRequest = tmpRequest.set('s_sign', md5(`${signKey}_${st}`))
178
+ const res = await tmpRequest;
179
+ assert(res.body.success === true);
180
+ const resData = res.body.data;
181
+ assert(resData.length > 0);
182
+ for (let i = 0; i < resData.length; i++) {
183
+ const item = resData[i]
184
+ assert(item.model)
185
+ assert(item.model.key)
186
+ assert(item.model.name)
187
+ assert(item.project)
188
+ for (const projKey in item.project) {
189
+ assert(item.project[projKey].key)
190
+ assert(item.project[projKey].name)
191
+ }
192
+ }
193
+ })
194
+ })