ap-dev 1.2.25 → 1.2.26

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 (91) hide show
  1. package/abap/ApiPanel/components/ApiContent.vue +1 -1
  2. package/abap/ApiPanel/components/ApiTable.vue +1 -1
  3. package/abap/ApiPanel/components/ApiTittle1.vue +1 -1
  4. package/abap/ApiPanel/components/ApiTittle2.vue +1 -1
  5. package/abap/ApiPanel/components/index.js +1 -1
  6. package/abap/CodePanel/abapKeywords.js +6 -6
  7. package/abap/CodePanel/componentMenus.js +28 -28
  8. package/abap/ConfigPanel/AbapCustomTable.vue +122 -122
  9. package/abap/ConfigPanel/AbapDocHistory.vue +145 -145
  10. package/abap/ConfigPanel/AbapSql.vue +81 -81
  11. package/abap/ConfigPanel/AbapTable.vue +379 -379
  12. package/abap/ConfigPanel/AbapTableCondition.vue +213 -213
  13. package/abap/ConfigPanel/AbapTableLink.vue +391 -391
  14. package/abap/SqlPanel/index.vue +1088 -1088
  15. package/abap/abap/abapStore.js +27 -27
  16. package/abap/abap/index.vue +87 -87
  17. package/abap/components/SapTable.vue +129 -129
  18. package/abap/components/SapTableField.vue +161 -161
  19. package/dev/ApiPanel/components/ApiCode.vue +1 -1
  20. package/dev/ApiPanel/components/ApiContent.vue +1 -1
  21. package/dev/ApiPanel/components/ApiTable.vue +1 -1
  22. package/dev/ApiPanel/components/ApiTittle1.vue +1 -1
  23. package/dev/ApiPanel/components/ApiTittle2.vue +1 -1
  24. package/dev/ApiPanel/components/index.js +1 -1
  25. package/dev/ApiPanel/modules/ApiBaseLayout.vue +1 -1
  26. package/dev/ComponentsPanel/items/ApDevItemBase.vue +1 -1
  27. package/dev/ComponentsPanel/items/ApDevItemButton.vue +1 -1
  28. package/dev/ComponentsPanel/items/ApDevItemChartBar.vue +1 -1
  29. package/dev/ComponentsPanel/items/ApDevItemChartGauge.vue +1 -1
  30. package/dev/ComponentsPanel/items/ApDevItemChartLine.vue +1 -1
  31. package/dev/ComponentsPanel/items/ApDevItemChartPie.vue +1 -1
  32. package/dev/ComponentsPanel/items/ApDevItemChartRadar.vue +1 -1
  33. package/dev/ComponentsPanel/items/ApDevItemCheckbox.vue +1 -1
  34. package/dev/ComponentsPanel/items/ApDevItemDateTime.vue +1 -1
  35. package/dev/ComponentsPanel/items/ApDevItemForm.vue +1 -1
  36. package/dev/ComponentsPanel/items/ApDevItemInput.vue +1 -1
  37. package/dev/ComponentsPanel/items/ApDevItemInputNumber.vue +1 -1
  38. package/dev/ComponentsPanel/items/ApDevItemLoading.vue +1 -1
  39. package/dev/ComponentsPanel/items/ApDevItemRadio.vue +1 -1
  40. package/dev/ComponentsPanel/items/ApDevItemSelect.vue +1 -1
  41. package/dev/ComponentsPanel/items/ApDevItemSwitch.vue +1 -1
  42. package/dev/ComponentsPanel/items/ApDevItemTooltip.vue +1 -1
  43. package/dev/ComponentsPanel/items/ApDevItemTree.vue +1 -1
  44. package/dev/ComponentsPanel/items/ApDevItemUpload.vue +1 -1
  45. package/dev/ComponentsPanel/items/test.vue +1 -1
  46. package/dev/ConfigPanel/DevCpt.vue +1036 -1036
  47. package/dev/ConfigPanel/DevCptBase.vue +210 -210
  48. package/dev/ConfigPanel/DevDbSource.vue +108 -108
  49. package/dev/ConfigPanel/DevDbUserSource.vue +117 -117
  50. package/dev/ConfigPanel/DevDocHistory.vue +145 -145
  51. package/dev/ConfigPanel/DevMyConfig.vue +205 -205
  52. package/dev/CustomPanel/CustomComponents.vue +10 -10
  53. package/dev/CustomPanel/CustomDataTree.vue +1 -1
  54. package/dev/CustomPanel/CustomTools.vue +1 -1
  55. package/dev/CustomPanel/index.vue +1 -1
  56. package/dev/CustomPanel/items/ApDevCheckbox.vue +7 -7
  57. package/dev/CustomPanel/items/ApDevCheckboxProp.vue +1 -1
  58. package/dev/CustomPanel/items/ApDevContainerRow.vue +155 -155
  59. package/dev/CustomPanel/items/ApDevContainerRowProp.vue +39 -39
  60. package/dev/CustomPanel/items/ApDevDateTime.vue +5 -5
  61. package/dev/CustomPanel/items/ApDevDateTimeProp.vue +1 -1
  62. package/dev/CustomPanel/items/ApDevDefaultProp.vue +20 -20
  63. package/dev/CustomPanel/items/ApDevInput.vue +49 -49
  64. package/dev/CustomPanel/items/ApDevInputNumber.vue +57 -57
  65. package/dev/CustomPanel/items/ApDevInputNumberProp.vue +96 -96
  66. package/dev/CustomPanel/items/ApDevInputProp.vue +85 -85
  67. package/dev/CustomPanel/items/ApDevRadio.vue +7 -7
  68. package/dev/CustomPanel/items/ApDevRadioProp.vue +1 -1
  69. package/dev/CustomPanel/items/ApDevSelect.vue +314 -314
  70. package/dev/CustomPanel/items/ApDevSelectProp.vue +83 -83
  71. package/dev/CustomPanel/items/ApDevTree.vue +5 -5
  72. package/dev/CustomPanel/items/ApDevTreeProp.vue +1 -1
  73. package/dev/CustomPanel/items/ApDevUpload.vue +6 -6
  74. package/dev/CustomPanel/items/ApDevUploadProp.vue +1 -1
  75. package/dev/CustomPanel/items/base/ApDevBase.vue +1 -1
  76. package/dev/CustomPanel/items/base/ApDevItemBase.vue +2 -2
  77. package/dev/CustomPanel/items/base/ApDevPropBase.vue +1 -1
  78. package/dev/CustomPanel/items/base/ApDevPropStyle.vue +93 -93
  79. package/dev/dev/DevUtil.js +31 -31
  80. package/dev/dev/devConfig.js +99 -99
  81. package/dev/dev/devStore.js +368 -368
  82. package/dev/dev/index.vue +85 -85
  83. package/ops/ApiPanel/components/ApiContent.vue +1 -1
  84. package/ops/ApiPanel/components/ApiTable.vue +1 -1
  85. package/ops/ApiPanel/components/ApiTittle1.vue +1 -1
  86. package/ops/ApiPanel/components/ApiTittle2.vue +1 -1
  87. package/ops/ApiPanel/components/index.js +1 -1
  88. package/ops/ConfigPanel/OpsDocHistory.vue +145 -145
  89. package/ops/ops/index.vue +60 -60
  90. package/ops/ops/opsStore.js +27 -27
  91. package/package.json +1 -1
@@ -1,379 +1,379 @@
1
- <template>
2
- <ap-container>
3
- <ap-aside margin="1111" width="350px">
4
- <ap-aside-tree :options.sync="treeOptions">
5
- <el-form slot="form" ref="tAbapTable" :inline="true" label-width="80px"
6
- :model="tAbapTableForm" :rules="tAbapTableRules">
7
- <el-form-item label="父类别">
8
- <el-select v-model="tAbapTableForm.fdParentId" filterable placeholder="请选择父节点">
9
- <el-option label="无" value=""/>
10
- <el-option
11
- v-for="item in typeList"
12
- :key="item.fdId"
13
- :label="item.fdName"
14
- :value="item.fdId"
15
- />
16
- </el-select>
17
- </el-form-item>
18
- <el-form-item label='类型' prop='fdType'>
19
- <el-select v-model="tAbapTableForm.fdType" filterable placeholder="请选择类型">
20
- <el-option key="1" label="分组" :value=1></el-option>
21
- <el-option key="2" label="表" :value=2></el-option>
22
- </el-select>
23
- </el-form-item>
24
- <el-form-item label='名称' prop='fdName'>
25
- <el-input v-model='tAbapTableForm.fdName'></el-input>
26
- </el-form-item>
27
- <el-form-item label='表描述' prop='fdDesc' v-show="tAbapTableForm.fdType == 2">
28
- <el-input v-model='tAbapTableForm.fdDesc'></el-input>
29
- </el-form-item>
30
- <el-form-item label='表作用' prop='fdFunction' v-show="tAbapTableForm.fdType == 2">
31
- <el-input v-model='tAbapTableForm.fdFunction' type="textarea"></el-input>
32
- </el-form-item>
33
- <el-form-item label='排序' prop='fdSort'>
34
- <el-input-number v-model="tAbapTableForm.fdSort" controls-position="right"/>
35
- </el-form-item>
36
- </el-form>
37
- <span slot="tree" slot-scope="scope" style="width: 100%">
38
- <div class="abap-tree-node-left ap-ellipse">
39
- <span v-if="scope.data.fdType == 1" style="color: #1890ff;">{{ scope.data.fdName }}</span>
40
- <span v-else>{{ scope.data.fdName }}</span>
41
- </div>
42
- <div style="font-size: 12px;">{{ scope.data.fdDesc }}</div>
43
- </span>
44
- </ap-aside-tree>
45
- </ap-aside>
46
- <ap-split-panel></ap-split-panel>
47
- <ap-container>
48
- <ap-header margin="1110">
49
- <div class="flex-col" style="color:#909399;font-size: 14px;">
50
- <span>简短描述:{{ tableSapText }}</span>
51
- <el-input v-model="tableFunction" :disabled="true" type="textarea"></el-input>
52
- </div>
53
- </ap-header>
54
- <ap-main margin="0110">
55
- <ap-table ref="tAbapTableFieldTableRef" :options.sync="tAbapTableFieldTable"></ap-table>
56
- </ap-main>
57
- </ap-container>
58
-
59
- <el-drawer title="" :visible.sync="showSqlDataTable" :with-header="false" size="800px" class="sap-abap-drawer">
60
- <div class="flex-col" style="padding: 10px;width: 100%;height: 100%;" v-loading="sqlDataTableLoadingFlag">
61
- <div>
62
- 预览行数:<el-input v-model="dataLimit" placeholder="" style="width: 100px"></el-input>
63
- </div>
64
- <div class="flex-1" style="height: 100%;overflow: auto;">
65
- <el-table :data="sqlData" border style="width: 100%" height="100%" fixed>
66
- <el-table-column fixed type="index">
67
- </el-table-column>
68
- <template v-for="item in sqlDataHeader">
69
- <el-table-column :prop="item" :label="item" :show-overflow-tooltip="true"></el-table-column>
70
- </template>
71
- </el-table>
72
- </div>
73
- </div>
74
- </el-drawer>
75
- </ap-container>
76
- </template>
77
-
78
- <script>
79
- export default {
80
- name: 'AbapTable',
81
- data() {
82
- let tAbapTableFieldCols = [
83
- {
84
- prop: 'fieldName',
85
- label: '字段名',
86
- type: 'input',
87
- add: false,
88
- edit: false,
89
- minWidth: 80,
90
- sortable: 'local'
91
- }, {
92
- prop: 'title',
93
- label: '标题',
94
- type: 'input',
95
- add: false,
96
- edit: false,
97
- minWidth: 80
98
- }, {
99
- prop: 'text',
100
- label: '简短描述',
101
- type: 'input',
102
- add: false,
103
- edit: false,
104
- minWidth: 120
105
- }, {
106
- prop: 'fdDesc',
107
- label: '自定义-描述',
108
- type: 'input',
109
- minWidth: 120,
110
- sortable: 'local',
111
- }, {
112
- prop: 'fdFunction',
113
- label: '自定义-作用',
114
- type: 'input',
115
- minWidth: 120
116
- }, {
117
- prop: 'fdType',
118
- label: '自定义-标识',
119
- type: 'select',
120
- width: 100,
121
- align:"center",
122
- sortable: 'local',
123
- selectOptions:[{label:" ", value: 0},{label:"查询常用", value:1},{label:"条件常用", value:2},],
124
- html: function (value, row) {
125
- switch (value) {
126
- case 1:
127
- return "<div class='ap-tag-success'>查询常用</div>";
128
- case 2:
129
- return "<div class='ap-tag-warning'>条件常用</div>";
130
-
131
- }
132
- return '';
133
- }
134
- }, {
135
- prop: 'dataType',
136
- label: '数据类型',
137
- type: 'input',
138
- add: false,
139
- edit: false,
140
- width: 80
141
- }, {
142
- prop: 'fieldLength',
143
- label: '长度',
144
- type: 'input',
145
- add: false,
146
- edit: false,
147
- width: 60,
148
- align:"right",
149
- }, {
150
- prop: 'fieldDecimal',
151
- label: '小数位',
152
- type: 'input',
153
- add: false,
154
- edit: false,
155
- width: 60,
156
- align:"right",
157
- }, {
158
- prop: 'keyFlag',
159
- label: '主键',
160
- type: 'input',
161
- add: false,
162
- edit: false,
163
- width: 50,
164
- align:"center",
165
- }, {
166
- prop: 'notNull',
167
- label: '非空',
168
- type: 'input',
169
- add: false,
170
- edit: false,
171
- width: 50,
172
- align:"center",
173
- },
174
- ];
175
- let tAbapTableFieldTable = {
176
- title: "字段列表",
177
- columns: tAbapTableFieldCols,
178
- dataUrl: "/apd/abap/AbapTable/getTableFieldList",
179
- saveUrl: "/apd/abap/AbapTable/saveTAbapTableFieldGridData",
180
- editPk: "fdId,fieldName,fdType,fdDesc", //默认fdId
181
- rowKey: "fieldName",
182
- toolbarBtn: [{btnType: "primary", text: "预览", icon: "el-icon-magic-stick", onClick: this.previewTable},
183
- "separator", "edit", "refresh", "save"],
184
- pagination: {pageSizes: [1000],pageSize: 1000},
185
- params: () => {
186
- return {
187
- tableName: this.selectedTable
188
- }
189
- }
190
- };
191
- return {
192
- // ----- 左侧树 -----
193
- defaultExpandedKeys: [],
194
- treeOptions: this.getTreeOption(),
195
- typeList: [],
196
- tAbapTableForm: {},
197
- tAbapTableRules: {},
198
- selectedTable: "",
199
- selectedTableId: "",
200
- tableFunction: "",
201
- tableSapText: "",
202
- // ----- 右侧 -----
203
- tAbapTableFieldTable: tAbapTableFieldTable,
204
- // 预览
205
- showSqlDataTable: false,
206
- sqlDataTableLoadingFlag: false,
207
- dataLimit: 100,
208
- sqlDataHeader: [],
209
- sqlData: [],
210
- }
211
- },
212
- methods: {
213
- // 左侧树:配置
214
- getTreeOption() {
215
- let treeOptions = {
216
- title: "SAP常用表",
217
- toolbarBtn: ["add", "edit", "del", "sort"],
218
- dialogTitle: "SAP常用表",
219
- showCheckbox: false,
220
- defaultExpandAll: false,
221
- defaultExpandedKeys: [],
222
- renderAfterExpand: true,
223
- sortByTree: true,
224
- sortByDrag: true,
225
- indent: 0,
226
- onClick: (data, node, comp) => {
227
- if (data.fdType != 2) {
228
- this.defaultExpandedKeys = [data.fdId];
229
- return
230
- }
231
- this.resetTableInfo();
232
- this.tAbapTableFieldTable.title = data.fdName + " (" + data.fdDesc + ")";
233
- this.tableFunction = data.fdFunction;
234
- this.selectedTable = data.fdName;
235
- this.selectedTableId = data.fdId;
236
- this.$refs.tAbapTableFieldTableRef.refresh();
237
- this.getSapTableText();
238
- },
239
- loadOptions: {
240
- url: "/apd/abap/AbapTable/getTAbapTableList",
241
- treeKey: {
242
- idKey: "fdId",
243
- parentKey: "fdParentId",
244
- childrenKey: "children",
245
- label: "fdName"
246
- },
247
- success: (response) => {
248
- this.treeOptions.defaultExpandedKeys = this.defaultExpandedKeys;
249
- this.$forceUpdate();
250
- this.getTreeGroup();
251
- },
252
- },
253
- editOptions: {
254
- url: "/apd/abap/AbapTable/getTAbapTableByFdId",
255
- data: (node) => {
256
- return {
257
- fdId: node.fdId
258
- }
259
- },
260
- success: (response) => {
261
- this.tAbapTableForm = response.data;
262
- },
263
- error() {
264
- },
265
- },
266
- insertUrl: "/apd/abap/AbapTable/insertTAbapTable",
267
- insertData: () => {
268
- return this.tAbapTableForm
269
- },
270
- updateUrl: "/apd/abap/AbapTable/updateTAbapTable",
271
- updateData: () => {
272
- return this.tAbapTableForm
273
- },
274
- deleteUrl: "/apd/abap/AbapTable/deleteTAbapTableByFdId",
275
- deleteData: (node) => {
276
- return {
277
- fdId: node.fdId
278
- }
279
- },
280
- updateSortUrl: '/apd/abap/AbapTable/updateTAbapTableSort',
281
- updateSortListUrl: '/apd/abap/AbapTable/updateTAbapTableSortList',
282
- resetForm: () => {
283
- this.tAbapTableForm = {
284
- fdParentId: '',
285
- fdType: '',
286
- fdName: '',
287
- fdDesc: '',
288
- fdFunction: '',
289
- fdSort: '',
290
- };
291
- },
292
- afterOpenAddDialog: (node) => {
293
- this.tAbapTableForm.fdParentId = node.fdId; // 自动赋值表单的父类型
294
- },
295
- filterNodeMethod: (value, data) => {
296
- if (!value) return true;
297
- if(data["fdName"] != null && data["fdName"].indexOf(value) !== -1) {
298
- return true;
299
- }
300
- if(data["fdDesc"] != null && data["fdDesc"].indexOf(value) !== -1) {
301
- return true;
302
- }
303
- return false;
304
- }
305
- };
306
-
307
- return treeOptions;
308
- },
309
- getTreeGroup() {
310
- this.$request({
311
- url: '/apd/abap/AbapTable/getTableGroupList',
312
- method: 'post',
313
- data: {}
314
- }).then(response => {
315
- this.typeList = response.data
316
- })
317
- },
318
- getSapTableText() {
319
- this.$request({
320
- url: '/apd/abap/AbapTable/getSapTableText',
321
- method: 'post',
322
- data: {
323
- tableName: this.selectedTable
324
- }
325
- }).then(response => {
326
- this.tableSapText = response.data
327
- })
328
- },
329
- resetTableInfo() {
330
- this.tableSapText = "";
331
- this.tableFunction = "";
332
- this.selectedTable = "";
333
- this.selectedTableId = "";
334
- this.tAbapTableFieldTable.title = "字段列表";
335
- },
336
- previewTable(){
337
- if (this.selectedTable == null || this.selectedTable == '') {
338
- this.$message.error("请选择表");
339
- return;
340
- }
341
-
342
- this.showSqlDataTable = true;
343
- this.sqlDataTableLoadingFlag = true;
344
- this.sqlData=[];
345
- this.sqlDataHeader=[];
346
- let selectStr = "";
347
- let selectionKeys = this.$refs.tAbapTableFieldTableRef.getSelectionKeys();
348
- if (selectionKeys == null || selectionKeys.length < 1) {
349
- selectStr = "*";
350
- } else {
351
- selectStr = selectionKeys.join(",");
352
- }
353
- console.log(selectionKeys);
354
- this.$request({
355
- url: '/apd/abap/TAbapSql/getDataBySql',
356
- method: 'post',
357
- data: {
358
- sqlStr: `SELECT ${selectStr} FROM saphanadb.${this.selectedTable}`,
359
- dataLimit: this.dataLimit
360
- }
361
- }).then(response => {
362
- this.sqlData = response.data.data;
363
- this.sqlDataHeader = response.data.header;
364
- }).finally(() => {
365
- this.sqlDataTableLoadingFlag = false;
366
- })
367
- }
368
-
369
- }
370
- }
371
- </script>
372
-
373
- <style scoped>
374
- .abap-tree-node-left {
375
- font-size: 13px;
376
- width: 50%;
377
- float: left;
378
- }
379
- </style>
1
+ <template>
2
+ <ap-container>
3
+ <ap-aside margin="1111" width="350px">
4
+ <ap-aside-tree :options.sync="treeOptions">
5
+ <el-form slot="form" ref="tAbapTable" :inline="true" label-width="80px"
6
+ :model="tAbapTableForm" :rules="tAbapTableRules">
7
+ <el-form-item label="父类别">
8
+ <el-select v-model="tAbapTableForm.fdParentId" filterable placeholder="请选择父节点">
9
+ <el-option label="无" value=""/>
10
+ <el-option
11
+ v-for="item in typeList"
12
+ :key="item.fdId"
13
+ :label="item.fdName"
14
+ :value="item.fdId"
15
+ />
16
+ </el-select>
17
+ </el-form-item>
18
+ <el-form-item label='类型' prop='fdType'>
19
+ <el-select v-model="tAbapTableForm.fdType" filterable placeholder="请选择类型">
20
+ <el-option key="1" label="分组" :value=1></el-option>
21
+ <el-option key="2" label="表" :value=2></el-option>
22
+ </el-select>
23
+ </el-form-item>
24
+ <el-form-item label='名称' prop='fdName'>
25
+ <el-input v-model='tAbapTableForm.fdName'></el-input>
26
+ </el-form-item>
27
+ <el-form-item label='表描述' prop='fdDesc' v-show="tAbapTableForm.fdType == 2">
28
+ <el-input v-model='tAbapTableForm.fdDesc'></el-input>
29
+ </el-form-item>
30
+ <el-form-item label='表作用' prop='fdFunction' v-show="tAbapTableForm.fdType == 2">
31
+ <el-input v-model='tAbapTableForm.fdFunction' type="textarea"></el-input>
32
+ </el-form-item>
33
+ <el-form-item label='排序' prop='fdSort'>
34
+ <el-input-number v-model="tAbapTableForm.fdSort" controls-position="right"/>
35
+ </el-form-item>
36
+ </el-form>
37
+ <span slot="tree" slot-scope="scope" style="width: 100%">
38
+ <div class="abap-tree-node-left ap-ellipse">
39
+ <span v-if="scope.data.fdType == 1" style="color: #1890ff;">{{ scope.data.fdName }}</span>
40
+ <span v-else>{{ scope.data.fdName }}</span>
41
+ </div>
42
+ <div style="font-size: 12px;">{{ scope.data.fdDesc }}</div>
43
+ </span>
44
+ </ap-aside-tree>
45
+ </ap-aside>
46
+ <ap-split-panel></ap-split-panel>
47
+ <ap-container>
48
+ <ap-header margin="1110">
49
+ <div class="flex-col" style="color:#909399;font-size: 14px;">
50
+ <span>简短描述:{{ tableSapText }}</span>
51
+ <el-input v-model="tableFunction" :disabled="true" type="textarea"></el-input>
52
+ </div>
53
+ </ap-header>
54
+ <ap-main margin="0110">
55
+ <ap-table ref="tAbapTableFieldTableRef" :options.sync="tAbapTableFieldTable"></ap-table>
56
+ </ap-main>
57
+ </ap-container>
58
+
59
+ <el-drawer title="" :visible.sync="showSqlDataTable" :with-header="false" size="800px" class="sap-abap-drawer">
60
+ <div class="flex-col" style="padding: 10px;width: 100%;height: 100%;" v-loading="sqlDataTableLoadingFlag">
61
+ <div>
62
+ 预览行数:<el-input v-model="dataLimit" placeholder="" style="width: 100px"></el-input>
63
+ </div>
64
+ <div class="flex-1" style="height: 100%;overflow: auto;">
65
+ <el-table :data="sqlData" border style="width: 100%" height="100%" fixed>
66
+ <el-table-column fixed type="index">
67
+ </el-table-column>
68
+ <template v-for="item in sqlDataHeader">
69
+ <el-table-column :prop="item" :label="item" :show-overflow-tooltip="true"></el-table-column>
70
+ </template>
71
+ </el-table>
72
+ </div>
73
+ </div>
74
+ </el-drawer>
75
+ </ap-container>
76
+ </template>
77
+
78
+ <script>
79
+ export default {
80
+ name: 'AbapTable',
81
+ data() {
82
+ let tAbapTableFieldCols = [
83
+ {
84
+ prop: 'fieldName',
85
+ label: '字段名',
86
+ type: 'input',
87
+ add: false,
88
+ edit: false,
89
+ minWidth: 80,
90
+ sortable: 'local'
91
+ }, {
92
+ prop: 'title',
93
+ label: '标题',
94
+ type: 'input',
95
+ add: false,
96
+ edit: false,
97
+ minWidth: 80
98
+ }, {
99
+ prop: 'text',
100
+ label: '简短描述',
101
+ type: 'input',
102
+ add: false,
103
+ edit: false,
104
+ minWidth: 120
105
+ }, {
106
+ prop: 'fdDesc',
107
+ label: '自定义-描述',
108
+ type: 'input',
109
+ minWidth: 120,
110
+ sortable: 'local',
111
+ }, {
112
+ prop: 'fdFunction',
113
+ label: '自定义-作用',
114
+ type: 'input',
115
+ minWidth: 120
116
+ }, {
117
+ prop: 'fdType',
118
+ label: '自定义-标识',
119
+ type: 'select',
120
+ width: 100,
121
+ align:"center",
122
+ sortable: 'local',
123
+ selectOptions:[{label:" ", value: 0},{label:"查询常用", value:1},{label:"条件常用", value:2},],
124
+ html: function (value, row) {
125
+ switch (value) {
126
+ case 1:
127
+ return "<div class='ap-tag-success'>查询常用</div>";
128
+ case 2:
129
+ return "<div class='ap-tag-warning'>条件常用</div>";
130
+
131
+ }
132
+ return '';
133
+ }
134
+ }, {
135
+ prop: 'dataType',
136
+ label: '数据类型',
137
+ type: 'input',
138
+ add: false,
139
+ edit: false,
140
+ width: 80
141
+ }, {
142
+ prop: 'fieldLength',
143
+ label: '长度',
144
+ type: 'input',
145
+ add: false,
146
+ edit: false,
147
+ width: 60,
148
+ align:"right",
149
+ }, {
150
+ prop: 'fieldDecimal',
151
+ label: '小数位',
152
+ type: 'input',
153
+ add: false,
154
+ edit: false,
155
+ width: 60,
156
+ align:"right",
157
+ }, {
158
+ prop: 'keyFlag',
159
+ label: '主键',
160
+ type: 'input',
161
+ add: false,
162
+ edit: false,
163
+ width: 50,
164
+ align:"center",
165
+ }, {
166
+ prop: 'notNull',
167
+ label: '非空',
168
+ type: 'input',
169
+ add: false,
170
+ edit: false,
171
+ width: 50,
172
+ align:"center",
173
+ },
174
+ ];
175
+ let tAbapTableFieldTable = {
176
+ title: "字段列表",
177
+ columns: tAbapTableFieldCols,
178
+ dataUrl: "/apd/abap/AbapTable/getTableFieldList",
179
+ saveUrl: "/apd/abap/AbapTable/saveTAbapTableFieldGridData",
180
+ editPk: "fdId,fieldName,fdType,fdDesc", //默认fdId
181
+ rowKey: "fieldName",
182
+ toolbarBtn: [{btnType: "primary", text: "预览", icon: "el-icon-magic-stick", onClick: this.previewTable},
183
+ "separator", "edit", "refresh", "save"],
184
+ pagination: {pageSizes: [1000],pageSize: 1000},
185
+ params: () => {
186
+ return {
187
+ tableName: this.selectedTable
188
+ }
189
+ }
190
+ };
191
+ return {
192
+ // ----- 左侧树 -----
193
+ defaultExpandedKeys: [],
194
+ treeOptions: this.getTreeOption(),
195
+ typeList: [],
196
+ tAbapTableForm: {},
197
+ tAbapTableRules: {},
198
+ selectedTable: "",
199
+ selectedTableId: "",
200
+ tableFunction: "",
201
+ tableSapText: "",
202
+ // ----- 右侧 -----
203
+ tAbapTableFieldTable: tAbapTableFieldTable,
204
+ // 预览
205
+ showSqlDataTable: false,
206
+ sqlDataTableLoadingFlag: false,
207
+ dataLimit: 100,
208
+ sqlDataHeader: [],
209
+ sqlData: [],
210
+ }
211
+ },
212
+ methods: {
213
+ // 左侧树:配置
214
+ getTreeOption() {
215
+ let treeOptions = {
216
+ title: "SAP常用表",
217
+ toolbarBtn: ["add", "edit", "del", "sort"],
218
+ dialogTitle: "SAP常用表",
219
+ showCheckbox: false,
220
+ defaultExpandAll: false,
221
+ defaultExpandedKeys: [],
222
+ renderAfterExpand: true,
223
+ sortByTree: true,
224
+ sortByDrag: true,
225
+ indent: 0,
226
+ onClick: (data, node, comp) => {
227
+ if (data.fdType != 2) {
228
+ this.defaultExpandedKeys = [data.fdId];
229
+ return
230
+ }
231
+ this.resetTableInfo();
232
+ this.tAbapTableFieldTable.title = data.fdName + " (" + data.fdDesc + ")";
233
+ this.tableFunction = data.fdFunction;
234
+ this.selectedTable = data.fdName;
235
+ this.selectedTableId = data.fdId;
236
+ this.$refs.tAbapTableFieldTableRef.refresh();
237
+ this.getSapTableText();
238
+ },
239
+ loadOptions: {
240
+ url: "/apd/abap/AbapTable/getTAbapTableList",
241
+ treeKey: {
242
+ idKey: "fdId",
243
+ parentKey: "fdParentId",
244
+ childrenKey: "children",
245
+ label: "fdName"
246
+ },
247
+ success: (response) => {
248
+ this.treeOptions.defaultExpandedKeys = this.defaultExpandedKeys;
249
+ this.$forceUpdate();
250
+ this.getTreeGroup();
251
+ },
252
+ },
253
+ editOptions: {
254
+ url: "/apd/abap/AbapTable/getTAbapTableByFdId",
255
+ data: (node) => {
256
+ return {
257
+ fdId: node.fdId
258
+ }
259
+ },
260
+ success: (response) => {
261
+ this.tAbapTableForm = response.data;
262
+ },
263
+ error() {
264
+ },
265
+ },
266
+ insertUrl: "/apd/abap/AbapTable/insertTAbapTable",
267
+ insertData: () => {
268
+ return this.tAbapTableForm
269
+ },
270
+ updateUrl: "/apd/abap/AbapTable/updateTAbapTable",
271
+ updateData: () => {
272
+ return this.tAbapTableForm
273
+ },
274
+ deleteUrl: "/apd/abap/AbapTable/deleteTAbapTableByFdId",
275
+ deleteData: (node) => {
276
+ return {
277
+ fdId: node.fdId
278
+ }
279
+ },
280
+ updateSortUrl: '/apd/abap/AbapTable/updateTAbapTableSort',
281
+ updateSortListUrl: '/apd/abap/AbapTable/updateTAbapTableSortList',
282
+ resetForm: () => {
283
+ this.tAbapTableForm = {
284
+ fdParentId: '',
285
+ fdType: '',
286
+ fdName: '',
287
+ fdDesc: '',
288
+ fdFunction: '',
289
+ fdSort: '',
290
+ };
291
+ },
292
+ afterOpenAddDialog: (node) => {
293
+ this.tAbapTableForm.fdParentId = node.fdId; // 自动赋值表单的父类型
294
+ },
295
+ filterNodeMethod: (value, data) => {
296
+ if (!value) return true;
297
+ if(data["fdName"] != null && data["fdName"].indexOf(value) !== -1) {
298
+ return true;
299
+ }
300
+ if(data["fdDesc"] != null && data["fdDesc"].indexOf(value) !== -1) {
301
+ return true;
302
+ }
303
+ return false;
304
+ }
305
+ };
306
+
307
+ return treeOptions;
308
+ },
309
+ getTreeGroup() {
310
+ this.$request({
311
+ url: '/apd/abap/AbapTable/getTableGroupList',
312
+ method: 'post',
313
+ data: {}
314
+ }).then(response => {
315
+ this.typeList = response.data
316
+ })
317
+ },
318
+ getSapTableText() {
319
+ this.$request({
320
+ url: '/apd/abap/AbapTable/getSapTableText',
321
+ method: 'post',
322
+ data: {
323
+ tableName: this.selectedTable
324
+ }
325
+ }).then(response => {
326
+ this.tableSapText = response.data
327
+ })
328
+ },
329
+ resetTableInfo() {
330
+ this.tableSapText = "";
331
+ this.tableFunction = "";
332
+ this.selectedTable = "";
333
+ this.selectedTableId = "";
334
+ this.tAbapTableFieldTable.title = "字段列表";
335
+ },
336
+ previewTable(){
337
+ if (this.selectedTable == null || this.selectedTable == '') {
338
+ this.$message.error("请选择表");
339
+ return;
340
+ }
341
+
342
+ this.showSqlDataTable = true;
343
+ this.sqlDataTableLoadingFlag = true;
344
+ this.sqlData=[];
345
+ this.sqlDataHeader=[];
346
+ let selectStr = "";
347
+ let selectionKeys = this.$refs.tAbapTableFieldTableRef.getSelectionKeys();
348
+ if (selectionKeys == null || selectionKeys.length < 1) {
349
+ selectStr = "*";
350
+ } else {
351
+ selectStr = selectionKeys.join(",");
352
+ }
353
+ console.log(selectionKeys);
354
+ this.$request({
355
+ url: '/apd/abap/TAbapSql/getDataBySql',
356
+ method: 'post',
357
+ data: {
358
+ sqlStr: `SELECT ${selectStr} FROM saphanadb.${this.selectedTable}`,
359
+ dataLimit: this.dataLimit
360
+ }
361
+ }).then(response => {
362
+ this.sqlData = response.data.data;
363
+ this.sqlDataHeader = response.data.header;
364
+ }).finally(() => {
365
+ this.sqlDataTableLoadingFlag = false;
366
+ })
367
+ }
368
+
369
+ }
370
+ }
371
+ </script>
372
+
373
+ <style scoped>
374
+ .abap-tree-node-left {
375
+ font-size: 13px;
376
+ width: 50%;
377
+ float: left;
378
+ }
379
+ </style>