ap-dev 1.2.13 → 1.2.15

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.
@@ -4,37 +4,66 @@
4
4
  <el-form
5
5
  ref="configFormRef"
6
6
  label-position="left"
7
- label-width="120px"
7
+ label-width="200px"
8
8
  :model="configForm"
9
9
  :inline-message="true">
10
10
  <el-form-item label="数据库" prop="fdSourceId">
11
11
  <el-select v-model="configForm.fdSourceId" placeholder="请选择数据库" filterable>
12
- <el-option v-for="item in dbSourceList"
13
- :key="item.fdId"
14
- :label="item.fdName"
15
- :value="item.fdId"/>
12
+ <el-option v-for="item in dbSourceList" :key="item.fdId" :label="item.fdName" :value="item.fdId"/>
16
13
  </el-select>
17
14
  </el-form-item>
18
15
 
19
- <el-form-item label="后端访问地址" prop="fdJavaHref">
20
- <el-input v-model="configForm.fdJavaHref" placeholder="http://本地ip:端口/项目名" class="item-width"/>
21
- <span class="item-msg">示例:http://172.22.0.147:8191/fa</span>
16
+ <el-form-item label="后端访问地址(请求代码生成)" prop="fdJavaHref">
17
+ <el-select v-model="configForm.fdJavaHref" class="item-width">
18
+ <template v-for="item in configHistoryList">
19
+ <el-option v-if="item.fdType == 1" :key="item.fdValue" :label="item.fdValue" :value="item.fdValue"></el-option>
20
+ </template>
21
+ </el-select>
22
+ <i class="el-icon-edit-outline edit-icon" @click="showHisTable(1)" />
22
23
  </el-form-item>
23
- <el-form-item label="后端项目路径" prop="fdJavaPath">
24
- <el-input v-model="configForm.fdJavaPath" placeholder="后端项目的根路径(后端代码生成位置)" class="item-width"/>
25
- <span class="item-msg">示例:E:\xxx\xxx\fa</span>
24
+ <el-form-item label="后端项目路径(生成文件)" prop="fdJavaPath">
25
+ <el-select v-model="configForm.fdJavaPath" class="item-width">
26
+ <template v-for="item in configHistoryList">
27
+ <el-option v-if="item.fdType == 2" :key="item.fdValue" :label="item.fdValue" :value="item.fdValue"></el-option>
28
+ </template>
29
+ </el-select>
30
+ <i class="el-icon-edit-outline edit-icon" @click="showHisTable(2)" />
26
31
  </el-form-item>
27
- <el-form-item label="前端访问地址" prop="fdVueHref">
28
- <el-input v-model="configForm.fdVueHref" placeholder="http://本地ip:端口/#/" class="item-width"/>
29
- <span class="item-msg">示例:http://172.22.0.252:9527/#/</span>
32
+ <el-form-item label="前端访问地址(预览)" prop="fdVueHref">
33
+ <el-select v-model="configForm.fdVueHref" class="item-width">
34
+ <template v-for="item in configHistoryList">
35
+ <el-option v-if="item.fdType == 3" :key="item.fdValue" :label="item.fdValue" :value="item.fdValue"></el-option>
36
+ </template>
37
+ </el-select>
38
+ <i class="el-icon-edit-outline edit-icon" @click="showHisTable(3)" />
30
39
  </el-form-item>
31
- <el-form-item label="前端项目路径" prop="fdVuePath">
32
- <el-input v-model="configForm.fdVuePath" placeholder="前端项目的根路径(前端代码生成位置)" class="item-width"/>
33
- <span class="item-msg">示例:E:\xxx\xxx\ap</span>
40
+ <el-form-item label="前端项目路径(生成文件)" prop="fdVuePath">
41
+ <el-select v-model="configForm.fdVuePath" class="item-width">
42
+ <template v-for="item in configHistoryList">
43
+ <el-option v-if="item.fdType == 4" :key="item.fdValue" :label="item.fdValue" :value="item.fdValue"></el-option>
44
+ </template>
45
+ </el-select>
46
+ <i class="el-icon-edit-outline edit-icon" @click="showHisTable(4)" />
34
47
  </el-form-item>
35
48
  </el-form>
36
49
  <el-button type="primary" @click="saveConfigForm">保 存</el-button>
37
50
  </ap-main>
51
+
52
+ <el-dialog
53
+ :title="dialogTitle"
54
+ :visible.sync="dialogVisible"
55
+ :close-on-click-modal="false"
56
+ @close="dialogCloseEvent"
57
+ width="50%">
58
+ <div style="color: red;font-weight: bold;margin-bottom: 5px" v-html="msg">
59
+ </div>
60
+ <div style="height: 300px;width: 100%">
61
+ <ap-table ref="tDevUserConfigHistoryRef" :options.sync="tDevUserConfigHistoryOpt"></ap-table>
62
+ </div>
63
+ <span slot="footer" class="dialog-footer">
64
+ <el-button @click="dialogVisible = false">取 消</el-button>
65
+ </span>
66
+ </el-dialog>
38
67
  </ap-container>
39
68
  </template>
40
69
 
@@ -45,11 +74,43 @@ export default {
45
74
  created() {
46
75
  this.initDbSource();
47
76
  this.initConfig();
77
+ this.initConfigHistory();
48
78
  },
49
79
  data() {
80
+ let columns = [
81
+ {
82
+ prop: 'fdValue',
83
+ label: '值',
84
+ type: 'input'
85
+ },
86
+ ];
87
+ let tableOpt = {
88
+ title: "用户配置信息",
89
+ columns: columns,
90
+ editPk: "fdId", //默认fdId
91
+ deletePk: "fdId", // 默认fdId
92
+ dataUrl: "/apd/TDevUserConfigHistory/getTDevUserConfigHistoryGridList",
93
+ saveUrl: "/apd/TDevUserConfigHistory/saveTDevUserConfigHistoryGridData",
94
+ deleteUrl: "/apd/TDevUserConfigHistory/deleteTDevUserConfigHistoryGridData",
95
+ toolbarBtn: ["add", "edit", "del", "cancel", "refresh", "save"],
96
+ addDefaultObj: () => {
97
+ return { fdType: this.editType}
98
+ },
99
+ params: () => {
100
+ return {
101
+ fdType: this.editType
102
+ }
103
+ }
104
+ };
50
105
  return {
51
106
  dbSourceList: [],
107
+ configHistoryList: [],
52
108
  configForm: {},
109
+ editType: "",
110
+ dialogVisible: false,
111
+ msg: "",
112
+ dialogTitle: "配置",
113
+ tDevUserConfigHistoryOpt: tableOpt,
53
114
  }
54
115
  },
55
116
  methods: {
@@ -70,6 +131,43 @@ export default {
70
131
  this.configForm = response.data;
71
132
  })
72
133
  },
134
+ initConfigHistory() {
135
+ this.$request({
136
+ url: '/apd/TDevUserConfigHistory/getTDevUserConfigHistoryList',
137
+ method: 'post',
138
+ data: {}
139
+ }).then(response => {
140
+ this.configHistoryList = response.data;
141
+ })
142
+ },
143
+ showHisTable(type) {
144
+ this.dialogVisible = true;
145
+ this.editType = type;
146
+ switch (type) {
147
+ case 1:
148
+ this.msg = "配置说明: http://本地ip:端口/项目名 → http://172.22.0.123:8191/pm";
149
+ this.dialogTitle = "后端访问地址(请求代码生成)";
150
+ break;
151
+ case 2:
152
+ this.msg = '配置说明: 后端项目本地根路径 → E:\\xxx\\xxx\\pm';
153
+ this.dialogTitle = "后端项目路径(生成文件)";
154
+ break;
155
+ case 3:
156
+ this.msg = '配置说明: http://本地ip:端口/#/ → http://172.22.0.123:9527/#/';
157
+ this.dialogTitle = "前端访问地址(预览)";
158
+ break;
159
+ case 4:
160
+ this.msg = '配置说明: 前端项目本地根路径 → E:\\xxx\\xxx\\ap';
161
+ this.dialogTitle = "前端项目路径(生成文件)";
162
+ break;
163
+ }
164
+ this.$nextTick(() => {
165
+ this.$refs.tDevUserConfigHistoryRef.refresh();
166
+ })
167
+ },
168
+ dialogCloseEvent() {
169
+ this.initConfigHistory()
170
+ },
73
171
  saveConfigForm() {
74
172
  let param = this.configForm;
75
173
  this.$request({
@@ -99,4 +197,9 @@ export default {
99
197
  color: #9e9e9e;
100
198
  margin-left: 10px;
101
199
  }
200
+ .edit-icon {
201
+ font-size: 19px;
202
+ margin-left: 10px;
203
+ color: #1682e6;
204
+ }
102
205
  </style>
@@ -0,0 +1,13 @@
1
+ <template>
2
+ <div class="api-code">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'ApiCode'
10
+ }
11
+ </script>
12
+
13
+
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <div>
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'ApiContent'
10
+ }
11
+ </script>
12
+
13
+ <style scoped>
14
+ .api-content {
15
+
16
+ }
17
+ </style>
@@ -0,0 +1,40 @@
1
+ <template>
2
+ <div style="height: 100%">
3
+ <el-table :data="data" border class="api-table-class" :span-method="spanMethod" height="100%">
4
+ <template v-for="col in columns">
5
+ <el-table-column :prop="col.prop" :label="col.label" :width="col.width" :min-width="col.minWidth" class-name="api-table-cell">
6
+ <template slot-scope="scope">
7
+ <div v-html="scope.row[scope.column.property]" />
8
+ </template>
9
+ </el-table-column>
10
+ </template>
11
+ </el-table>
12
+ </div>
13
+ </template>
14
+
15
+ <script>
16
+ export default {
17
+ name: 'ApiTable',
18
+ props: ['data', 'columns', 'spanMethod'],
19
+ methods: {
20
+ formatCol(row, column, cellValue, index) {
21
+ return cellValue
22
+ }
23
+ }
24
+ }
25
+ </script>
26
+
27
+ <style scoped>
28
+ .api-table-class {
29
+ width: 100%
30
+ }
31
+
32
+ .api-table-class /deep/ th, .api-table-class /deep/ td {
33
+ padding: 2px;
34
+ }
35
+
36
+ /*模式式样覆盖:垂直居上*/
37
+ .el-table /deep/ .api-table-cell {
38
+ vertical-align: top
39
+ }
40
+ </style>
@@ -0,0 +1,16 @@
1
+ <template>
2
+ <div>
3
+ <h2>
4
+ <slot />
5
+ </h2>
6
+ </div>
7
+ </template>
8
+
9
+ <script>
10
+ export default {
11
+ name: 'ApiTittle1'
12
+ }
13
+ </script>
14
+
15
+ <style scoped>
16
+ </style>
@@ -0,0 +1,16 @@
1
+ <template>
2
+ <div>
3
+ <h3>
4
+ <slot />
5
+ </h3>
6
+ </div>
7
+ </template>
8
+
9
+ <script>
10
+ export default {
11
+ name: 'ApiTittle2'
12
+ }
13
+ </script>
14
+
15
+ <style scoped>
16
+ </style>
@@ -0,0 +1,5 @@
1
+ export { default as ApiCode } from './ApiCode'
2
+ export { default as ApiTittle1 } from './ApiTittle1'
3
+ export { default as ApiTittle2 } from './ApiTittle2'
4
+ export { default as ApiContent } from './ApiContent'
5
+ export { default as ApiTable } from './ApiTable'
@@ -0,0 +1,265 @@
1
+ <template>
2
+ <ap-container>
3
+ <ap-aside margin="1111" style="width: 235px">
4
+ <ap-aside-tree :options.sync="treeOptions">
5
+ <span slot="tree" slot-scope="scope">
6
+ <span style="font-size: 12px;">{{ scope.data.fdName }}</span>
7
+ </span>
8
+ </ap-aside-tree>
9
+ </ap-aside>
10
+ <ap-split-panel/>
11
+ <ap-main margin="1110" v-loading="loading">
12
+ <div v-if="showCustom">
13
+ <component :is="customComponent" />
14
+ </div>
15
+ <ap-doc v-if="showDoc" v-model="doc"></ap-doc>
16
+ <el-tabs v-if="showTabs" v-model="tabActiveName" tabPosition="left" class="api-tabs sap-dev-api" @tab-click="clickTabEvent">
17
+ <template v-for="(item,index) in tabs">
18
+ <el-tab-pane :label="item.fdName" :name="getTabName(item)" :id="item.fdId" class="api-tab">
19
+ <el-tabs v-if="showTopTabs" v-model="toptabActiveName" type="card" @tab-click="clickTopTabEvent">
20
+ <template v-for="(item2,index2) in topTabs">
21
+ <el-tab-pane :label="item2.fdName" :name="getTabName(item2)">
22
+ <ap-doc v-if="!showTopTabsCustom" v-model="doc"></ap-doc>
23
+ <component v-else :is="customComponent" />
24
+ </el-tab-pane>
25
+ </template>
26
+ </el-tabs>
27
+
28
+ <div v-else>
29
+ <ap-doc v-if="!showTabsCustom" v-model="doc"></ap-doc>
30
+ <component v-else :is="customComponent" />
31
+ </div>
32
+ </el-tab-pane>
33
+ </template>
34
+ </el-tabs>
35
+ </ap-main>
36
+ </ap-container>
37
+ </template>
38
+
39
+ <script>
40
+ // 批量导入modules下的组件
41
+ const allComponents = require.context('./modules', false, /\.vue$/)
42
+ const apiComponents = {}
43
+ allComponents.keys().forEach(fileName => {
44
+ const comp = allComponents(fileName)
45
+ apiComponents[fileName.replace(/^\.\/(.*)\.\w+$/, '$1')] = comp.default
46
+ })
47
+
48
+ export default {
49
+ name: 'ApiPanel',
50
+ components: apiComponents,
51
+ data() {
52
+ return {
53
+ // ----- 左侧树 -----
54
+ treeOptions: this.getTreeOption(),
55
+ selectedDocTypeId: "",
56
+ // ----- 右侧 -----
57
+ loading: false,
58
+ customComponent: "",
59
+ showCustom: false,
60
+ showDoc: false,
61
+ showTabs: false,
62
+ showTabsCustom: false,
63
+ showTopTabs: false,
64
+ showTopTabsCustom: false,
65
+ tabActiveName: "",
66
+ tabs: [],
67
+ doc: "",
68
+ currentComponent: 'ApiLog',
69
+ // ----- 右上侧 -----
70
+ toptabActiveName: null,
71
+ topTabs: [], // 左侧顶部
72
+ }
73
+ },
74
+ methods: {
75
+ // 左侧树:配置
76
+ getTreeOption() {
77
+ let treeOptions = {
78
+ showTitle: false,
79
+ onClick: (data, node, comp) => {
80
+ this.scrollTop();
81
+ this.selectedDocTypeId = data.fdId;
82
+ this.hideContentFn();
83
+ // 自定义组件
84
+ let customComponent = data.fdCustom;
85
+ if(customComponent != null && customComponent != ""){
86
+ this.customComponent = customComponent;
87
+ this.showCustomFn();
88
+
89
+ return;
90
+ }
91
+ // 单页
92
+ if (data.fdType == 2 || data.fdLayout == "one") {
93
+ this.showDocFn();
94
+ this.getDocText();
95
+ return;
96
+ }
97
+ // 左侧
98
+ this.getDocGroup();
99
+ },
100
+ loadOptions: {
101
+ url: "/apd/ops/OpsDoc/getOpsDocApiList",
102
+ treeKey: {
103
+ idKey: "fdId",
104
+ parentKey: "fdParentId",
105
+ childrenKey: "children",
106
+ label: "fdName"
107
+ },
108
+ success: (response) => {
109
+ },
110
+ },
111
+ afterOpenAddDialog: (node) => {
112
+ },
113
+ };
114
+ return treeOptions;
115
+ },
116
+ getDocGroup() {
117
+ this.loading = true;
118
+ this.showTabsFn();
119
+ this.$request({
120
+ url: '/apd/ops/OpsDoc/getDocGroup',
121
+ method: 'post',
122
+ data: {
123
+ id: this.selectedDocTypeId
124
+ }
125
+ }).then(response => {
126
+ this.tabs = response.data
127
+ }).finally(() => {
128
+ this.loading = false;
129
+ })
130
+ },
131
+ getDocText() {
132
+ this.loading = true;
133
+ this.$request({
134
+ url: '/apd/ops/OpsDoc/getDocText',
135
+ method: 'post',
136
+ data: {
137
+ id: this.selectedDocTypeId
138
+ }
139
+ }).then(response => {
140
+ this.doc = response.data
141
+ }).finally(() => {
142
+ this.loading = false;
143
+ })
144
+ },
145
+ getTabName(obj){
146
+ // 分组
147
+ if (obj.fdType == 1) {
148
+ return '%%' + obj.fdId;
149
+ }
150
+ // 自定义组件
151
+ if( obj.fdCustom != null && obj.fdCustom != '' && obj.fdCustom != undefined ) {
152
+ return '##' + obj.fdCustom;
153
+ } else {
154
+ // 文档Id
155
+ return obj.fdId;
156
+ }
157
+ },
158
+ clickTabEvent(tab) {
159
+ this.scrollTop();
160
+ let name = tab._props.name;
161
+ // 左上菜单
162
+ if (name.startsWith('%%')) {
163
+ this.$request({
164
+ url: '/apd/ops/OpsDoc/getDocGroup',
165
+ method: 'post',
166
+ data: {
167
+ id: name.substring(2, name.length)
168
+ }
169
+ }).then(response => {
170
+ this.topTabs = response.data
171
+ })
172
+ this.showTopTabsFn();
173
+ return;
174
+ }
175
+ // 自定义组件
176
+ if (name.startsWith('##')) {
177
+ this.showTabsCustom = true;
178
+ this.showTopTabs = false;
179
+ this.customComponent = name.substring(2, name.length);
180
+ return;
181
+ }
182
+
183
+ // 文档
184
+ this.showTabsCustom = false;
185
+ this.showTopTabs = false;
186
+ this.selectedDocTypeId = name;
187
+ this.getDocText();
188
+
189
+ },
190
+ clickTopTabEvent(tab) {
191
+ this.scrollTop();
192
+ let name = tab._props.name;
193
+ // 自定义组件
194
+ if (name.startsWith('##')) {
195
+ this.showTopTabsCustom = true;
196
+ this.customComponent = name.substring(2, name.length);
197
+ return;
198
+ }
199
+ // 文档
200
+ this.showTopTabsCustom = false;
201
+ this.selectedDocTypeId = name;
202
+ this.getDocText();
203
+ },
204
+ hideContentFn() {
205
+ this.showDoc = false;
206
+ this.showTabs = false;
207
+ this.showTopTabs = false;
208
+ this.doc = "";
209
+ this.tabActiveName = "";
210
+ },
211
+ showCustomFn() {
212
+ this.showCustom = true;
213
+ this.showDoc = false;
214
+ this.showTabs = false;
215
+ this.showTopTabs = false;
216
+ },
217
+ showDocFn() {
218
+ this.showCustom = false;
219
+ this.showDoc = true;
220
+ this.showTabs = false;
221
+ this.showTopTabs = false;
222
+ },
223
+ showTabsFn() {
224
+ this.showCustom = false;
225
+ this.showDoc = false;
226
+ this.showTabs = true;
227
+ this.showTopTabs = false;
228
+ },
229
+ showTopTabsFn() {
230
+ this.showCustom = false;
231
+ this.showDoc = false;
232
+ this.showTabs = true;
233
+ this.showTopTabs = true;
234
+ },
235
+ scrollTop(){
236
+ // 回到顶部
237
+ let ctn = document.getElementsByClassName('el-tabs__content')
238
+ if (ctn != null && ctn.length <1) {
239
+ return;
240
+ }
241
+ ctn[0].scrollTop = 0;
242
+ }
243
+ }
244
+ }
245
+ </script>
246
+
247
+ <style scoped>
248
+ .api-tabs {
249
+ display: flex;
250
+ height: 100%;
251
+ }
252
+
253
+ .api-tabs /deep/ .el-tabs__content {
254
+ flex: 1;
255
+ overflow: scroll;
256
+ }
257
+
258
+ .api-tabs /deep/ .el-tabs__item{
259
+ padding: 0 15px 0 15px;
260
+ }
261
+
262
+ .api-tabs /deep/ .el-tabs__item {
263
+ text-align: left;
264
+ }
265
+ </style>
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <div>
3
+ <h3>ABAP · 开发文档</h3>
4
+
5
+ 请选择需要查看的API!
6
+ </div>
7
+ </template>
8
+
9
+ <script>
10
+ export default {
11
+ name: 'ApiDefault'
12
+ }
13
+ </script>
14
+
15
+ <style scoped>
16
+
17
+ </style>
@@ -0,0 +1,31 @@
1
+ <template>
2
+ <div>
3
+ <api-tittle1><i class="el-icon-guide"/> 2022-11-22 <span class="log-version">1.0.0</span></api-tittle1>
4
+ <h4>SAP ABAP开发平台1.0</h4>
5
+ 1、ABAP开发平台1.0正式发布<br>
6
+ <div class="ap-split-line"/>
7
+
8
+ <api-tittle1><i class="el-icon-guide"/> 2022-11-01 <span class="log-version">0.0.1</span></api-tittle1>
9
+ <h4>SAP ABAP开发平台</h4>
10
+ 1、开发平台初始化构建<br>
11
+ <div class="ap-split-line"/>
12
+
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ import {ApiCode, ApiContent, ApiTable, ApiTittle1, ApiTittle2} from './../components'
18
+
19
+ export default {
20
+ name: 'ApiLog',
21
+ components: {
22
+ ApiTable, ApiCode, ApiTittle1, ApiContent, ApiTittle2
23
+ }
24
+ }
25
+ </script>
26
+
27
+ <style scoped>
28
+ .log-version {
29
+ margin-left: 30px;
30
+ }
31
+ </style>