ap-dev 1.0.28 → 1.0.32
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/dev/ApiPanel/images/ApiSwagger1.png +0 -0
- package/dev/ApiPanel/images/ApiSwagger2.png +0 -0
- package/dev/ApiPanel/modules/ApiLog.vue +40 -35
- package/dev/BackgroundPanel/index.vue +215 -198
- package/dev/ComponentsPanel/index.vue +118 -133
- package/dev/ConfigPanel/DevMyConfig.vue +41 -24
- package/dev/DbDesignPanel/DevDbTable.vue +13 -11
- package/dev/OnlineCodePanel/index.vue +136 -0
- package/dev/OperatePanel/index.vue +89 -78
- package/dev/TemplatePanel/index.vue +479 -458
- package/dev/base/GeneratorPage.vue +51 -0
- package/dev/base/VueRender.vue +94 -0
- package/dev/dev/DevUtil.js +19 -18
- package/dev/dev/index.vue +63 -43
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
@@ -1,45 +1,50 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
2
|
+
<div>
|
|
3
|
+
<api-tittle1><i class="el-icon-guide"/> 2021-09-16 <span class="log-version">1.0.5</span></api-tittle1>
|
|
4
|
+
<h4>新特性</h4>
|
|
5
|
+
1、开发平台:新增在线开发模块<br>
|
|
6
|
+
<div class="ap-split-line"/>
|
|
7
|
+
|
|
8
|
+
<api-tittle1><i class="el-icon-guide"/> 2021-04-27 <span class="log-version">1.0.4</span></api-tittle1>
|
|
9
|
+
<h4>新特性</h4>
|
|
10
|
+
1、后台Mapper:支持使用xml定义sql<br>
|
|
11
|
+
<div class="ap-split-line"/>
|
|
12
|
+
|
|
13
|
+
<api-tittle1><i class="el-icon-guide"/> 2021-04-23 <span class="log-version">1.0.3</span></api-tittle1>
|
|
14
|
+
<h4>新特性</h4>
|
|
15
|
+
1、表格组件【searchTree】:添加searchTreeDefaultCheckedKeys属性。<br>
|
|
16
|
+
<div class="ap-split-line"/>
|
|
17
|
+
|
|
18
|
+
<api-tittle1><i class="el-icon-guide"/> 2021-04-22 <span class="log-version">1.0.2</span></api-tittle1>
|
|
19
|
+
<h4>优化</h4>
|
|
20
|
+
1、后台update设值为null封装<br>
|
|
21
|
+
<div class="ap-split-line"/>
|
|
22
|
+
|
|
23
|
+
<api-tittle1><i class="el-icon-guide"/> 2021-04-15 <span class="log-version">1.0.1</span></api-tittle1>
|
|
24
|
+
<h4>新特性</h4>
|
|
25
|
+
1、表格组件【searchPicker】:添加searchPickerLoadTime、searchPickerBeforeClick属性。<br>
|
|
26
|
+
2、表格组件【searchTree】:添加searchTreeLoadTime、searchTreeParams、searchTreeBeforeClick属性。<br>
|
|
27
|
+
3、表格组件【searchTable】:添加searchTableLoadTime、searchTableBeforeClick属性。<br>
|
|
28
|
+
<h4>优化</h4>
|
|
29
|
+
1、表格组件【searchPicker】:删除searchPickerDefaultLoad属性。<br>
|
|
30
|
+
<!--<h4>BUG修复</h4>-->
|
|
31
|
+
|
|
32
|
+
</div>
|
|
28
33
|
</template>
|
|
29
34
|
|
|
30
35
|
<script>
|
|
31
|
-
import {
|
|
36
|
+
import {ApiCode, ApiContent, ApiTable, ApiTittle1, ApiTittle2} from './../components'
|
|
32
37
|
|
|
33
38
|
export default {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
name: 'ApiLog',
|
|
40
|
+
components: {
|
|
41
|
+
ApiTable, ApiCode, ApiTittle1, ApiContent, ApiTittle2
|
|
42
|
+
}
|
|
38
43
|
}
|
|
39
44
|
</script>
|
|
40
45
|
|
|
41
46
|
<style scoped>
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
</style>
|
|
47
|
+
.log-version {
|
|
48
|
+
margin-left: 30px;
|
|
49
|
+
}
|
|
50
|
+
</style>
|
|
@@ -2,26 +2,26 @@
|
|
|
2
2
|
<ap-container>
|
|
3
3
|
<ap-aside margin="1111" style="width: 450px">
|
|
4
4
|
<div class="layout-aside-header">
|
|
5
|
-
<div class="layout-aside-header-title">{{headerName}}</div>
|
|
5
|
+
<div class="layout-aside-header-title">{{ headerName }}</div>
|
|
6
6
|
</div>
|
|
7
7
|
<div>
|
|
8
8
|
<el-input v-model="filterText" placeholder="关键字过滤"/>
|
|
9
9
|
</div>
|
|
10
10
|
<div v-loading="loadingTreeFlag" class="layout-aside-content">
|
|
11
11
|
<el-tree
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
12
|
+
ref="typeTree"
|
|
13
|
+
class="filter-tree"
|
|
14
|
+
node-key="fdId"
|
|
15
|
+
:data="typeTreeList"
|
|
16
|
+
:props="defaultProps"
|
|
17
|
+
:highlight-current="true"
|
|
18
|
+
:filter-node-method="filterNode"
|
|
19
|
+
:indent="1"
|
|
20
|
+
show-checkbox
|
|
21
|
+
default-expand-all
|
|
22
|
+
:check-on-click-node="true"
|
|
23
|
+
:expand-on-click-node="false"
|
|
24
|
+
@check-change="checkChangeEvent"
|
|
25
25
|
>
|
|
26
26
|
<div slot-scope="{ node, data }" style="width: 100%">
|
|
27
27
|
<div class="dev-tree-node-left ap-ellipse">
|
|
@@ -35,8 +35,17 @@
|
|
|
35
35
|
<ap-main margin="1110">
|
|
36
36
|
<div class="item-ctn">
|
|
37
37
|
<div class="title-span">
|
|
38
|
-
<
|
|
39
|
-
|
|
38
|
+
<div>
|
|
39
|
+
<i class="el-icon-title-flag"/>
|
|
40
|
+
后台请求路径:
|
|
41
|
+
<span class="api-code">{{ userConfig.fdJavaHref }}</span>
|
|
42
|
+
</div>
|
|
43
|
+
<div style="padding: 13px 0 0 20px;">
|
|
44
|
+
文件生成位置:
|
|
45
|
+
<span class="api-code">
|
|
46
|
+
{{ userConfig.fdJavaPath }}
|
|
47
|
+
</span>
|
|
48
|
+
</div>
|
|
40
49
|
</div>
|
|
41
50
|
</div>
|
|
42
51
|
|
|
@@ -86,11 +95,11 @@
|
|
|
86
95
|
</div>
|
|
87
96
|
<div style="text-align: center;">
|
|
88
97
|
<el-button
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
98
|
+
type="primary"
|
|
99
|
+
icon="el-icon-magic-stick"
|
|
100
|
+
circle
|
|
101
|
+
style="padding: 30px;font-size: 60px;"
|
|
102
|
+
@click="generateCode"
|
|
94
103
|
/>
|
|
95
104
|
</div>
|
|
96
105
|
<div class="msg" v-html="msg"/>
|
|
@@ -100,207 +109,215 @@
|
|
|
100
109
|
</template>
|
|
101
110
|
|
|
102
111
|
<script>
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
112
|
+
import {convertToTreeData} from 'ap-util/util/DataUtil'
|
|
113
|
+
import {getUserConfig} from './../dev/DevUtil'
|
|
114
|
+
export default {
|
|
115
|
+
name: 'BackgroundPanel',
|
|
116
|
+
data() {
|
|
117
|
+
return {
|
|
118
|
+
// ----- 左侧树 -----
|
|
119
|
+
headerName: '表',
|
|
120
|
+
loadingTreeFlag: false,
|
|
121
|
+
filterText: '',
|
|
122
|
+
typeTreeList: [],
|
|
123
|
+
defaultProps: {
|
|
124
|
+
children: 'children',
|
|
125
|
+
label: 'fdName'
|
|
126
|
+
},
|
|
127
|
+
// ----- dialog -----
|
|
128
|
+
selectedTables: [],
|
|
129
|
+
createEntity: 1,
|
|
130
|
+
createEntityFD: 1,
|
|
131
|
+
createController: 1,
|
|
132
|
+
createService: 1,
|
|
133
|
+
createDao: 1,
|
|
134
|
+
createXml: 0,
|
|
135
|
+
msg: '',
|
|
136
|
+
// ----- 右侧内容 -----
|
|
137
|
+
userConfig: getUserConfig()
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
watch: {
|
|
141
|
+
filterText(val) {
|
|
142
|
+
this.$refs.typeTree.filter(val)
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
created() {
|
|
146
|
+
this.loadTreeData();
|
|
147
|
+
},
|
|
148
|
+
methods: {
|
|
149
|
+
// 左侧树:列头
|
|
150
|
+
setHeaderName() {
|
|
151
|
+
if (this.typeTreeList.length > 1) {
|
|
152
|
+
this.headerName = "[" + this.typeTreeList[0].fdDatabase + "] - 表";
|
|
129
153
|
}
|
|
130
154
|
},
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
155
|
+
// 左侧树:加载数据
|
|
156
|
+
loadTreeData() {
|
|
157
|
+
this.loadingTreeFlag = true
|
|
158
|
+
this.$request({
|
|
159
|
+
url: '/apd/db/DevDbTable/getTableList',
|
|
160
|
+
method: 'post',
|
|
161
|
+
data: {
|
|
162
|
+
sourceId: this.userConfig.fdSourceId
|
|
163
|
+
}
|
|
164
|
+
}).then(response => {
|
|
165
|
+
this.typeTreeList = convertToTreeData(response.data, {
|
|
166
|
+
idKey: "fdId",
|
|
167
|
+
parentKey: "fdParentId",
|
|
168
|
+
childrenKey: "children",
|
|
169
|
+
});
|
|
170
|
+
this.setHeaderName();
|
|
171
|
+
}).finally(() => {
|
|
172
|
+
this.loadingTreeFlag = false
|
|
173
|
+
})
|
|
135
174
|
},
|
|
136
|
-
|
|
175
|
+
// 左侧树:初始化数据
|
|
176
|
+
initTreeData() {
|
|
177
|
+
// 重置当前选择节点
|
|
178
|
+
this.$refs.typeTree.setCurrentKey()
|
|
137
179
|
this.loadTreeData()
|
|
138
180
|
},
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}).then(response => {
|
|
156
|
-
this.typeTreeList = convertToTreeData(response.data, {
|
|
157
|
-
idKey: "fdId",
|
|
158
|
-
parentKey: "fdParentId",
|
|
159
|
-
childrenKey: "children",
|
|
160
|
-
});
|
|
161
|
-
this.setHeaderName();
|
|
162
|
-
}).finally(() => {
|
|
163
|
-
this.loadingTreeFlag = false
|
|
164
|
-
})
|
|
165
|
-
},
|
|
166
|
-
// 左侧树:初始化数据
|
|
167
|
-
initTreeData() {
|
|
168
|
-
// 重置当前选择节点
|
|
169
|
-
this.$refs.typeTree.setCurrentKey()
|
|
170
|
-
this.loadTreeData()
|
|
171
|
-
},
|
|
172
|
-
// 左侧树:过滤节点
|
|
173
|
-
filterNode(value, data) {
|
|
174
|
-
if (!value) return true
|
|
175
|
-
if (data.fdName.indexOf(value) !== -1) {
|
|
176
|
-
return true
|
|
177
|
-
}
|
|
178
|
-
if (data.comment != null && data.comment.indexOf(value) !== -1) {
|
|
179
|
-
return true
|
|
180
|
-
}
|
|
181
|
-
return false
|
|
182
|
-
},
|
|
183
|
-
// 选择事件
|
|
184
|
-
checkChangeEvent(data, node, comp) {
|
|
185
|
-
const parentNodes = this.$refs.typeTree.getHalfCheckedNodes()
|
|
186
|
-
const selectNodes = this.$refs.typeTree.getCheckedNodes(false)
|
|
187
|
-
const tables = parentNodes.concat(selectNodes)
|
|
181
|
+
// 左侧树:过滤节点
|
|
182
|
+
filterNode(value, data) {
|
|
183
|
+
if (!value) return true
|
|
184
|
+
if (data.fdName.indexOf(value) !== -1) {
|
|
185
|
+
return true
|
|
186
|
+
}
|
|
187
|
+
if (data.comment != null && data.comment.indexOf(value) !== -1) {
|
|
188
|
+
return true
|
|
189
|
+
}
|
|
190
|
+
return false
|
|
191
|
+
},
|
|
192
|
+
// 选择事件
|
|
193
|
+
checkChangeEvent(data, node, comp) {
|
|
194
|
+
const parentNodes = this.$refs.typeTree.getHalfCheckedNodes()
|
|
195
|
+
const selectNodes = this.$refs.typeTree.getCheckedNodes(false)
|
|
196
|
+
const tables = parentNodes.concat(selectNodes)
|
|
188
197
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
198
|
+
const newList = []
|
|
199
|
+
for (let i = 0; i < tables.length; i++) {
|
|
200
|
+
if (tables[i].fdType == 1) {
|
|
201
|
+
newList.push(tables[i])
|
|
194
202
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
data[j].children.push(data[i])
|
|
203
|
+
}
|
|
204
|
+
this.selectedTables = newList
|
|
205
|
+
},
|
|
206
|
+
// 左侧树:转换成tree要求的数据格式
|
|
207
|
+
handelTreeData(data) {
|
|
208
|
+
const newList = []
|
|
209
|
+
for (let i = 0; i < data.length; i++) {
|
|
210
|
+
const fdParentId = data[i].fdParentId
|
|
211
|
+
// 根节点
|
|
212
|
+
if (!fdParentId) {
|
|
213
|
+
newList.push(data[i])
|
|
214
|
+
} else {
|
|
215
|
+
// 子节点
|
|
216
|
+
for (let j = 0; j < data.length; j++) {
|
|
217
|
+
// 查找父节点
|
|
218
|
+
if (data[j].fdId == fdParentId) {
|
|
219
|
+
if (!data[j].children) {
|
|
220
|
+
data[j].children = []
|
|
214
221
|
}
|
|
222
|
+
data[j].children.push(data[i])
|
|
215
223
|
}
|
|
216
224
|
}
|
|
217
225
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}).then(response => {
|
|
229
|
-
this.msg = response.data
|
|
230
|
-
this.$message.success('操作成功!')
|
|
231
|
-
})
|
|
232
|
-
},
|
|
233
|
-
generateCode() {
|
|
234
|
-
if (this.selectedTables.length < 1) {
|
|
235
|
-
this.$message.error('请选择表!')
|
|
236
|
-
return
|
|
226
|
+
}
|
|
227
|
+
return newList
|
|
228
|
+
},
|
|
229
|
+
createFile(projectName, list) {
|
|
230
|
+
this.$request({
|
|
231
|
+
url: '/apd/dev/DevGenerateCode/createFile',
|
|
232
|
+
method: 'post',
|
|
233
|
+
data: {
|
|
234
|
+
list: JSON.stringify(list),
|
|
235
|
+
projectName: projectName
|
|
237
236
|
}
|
|
237
|
+
}).then(response => {
|
|
238
|
+
this.msg = response.data
|
|
239
|
+
this.$message.success('操作成功!')
|
|
240
|
+
})
|
|
241
|
+
},
|
|
242
|
+
generateCode() {
|
|
243
|
+
if (this.selectedTables.length < 1) {
|
|
244
|
+
this.$message.error('请选择表!')
|
|
245
|
+
return
|
|
246
|
+
}
|
|
238
247
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
248
|
+
const javaUrl =this.userConfig.fdJavaPath
|
|
249
|
+
if (javaUrl == null || javaUrl == '') {
|
|
250
|
+
this.$message.error('请先配置共通参数。【顶栏】->【配置】')
|
|
251
|
+
return
|
|
252
|
+
}
|
|
244
253
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
createEntityFD: this.createEntityFD,
|
|
260
|
-
createController: this.createController,
|
|
261
|
-
createService: this.createService,
|
|
262
|
-
createDao: this.createDao,
|
|
263
|
-
createXml: this.createXml,
|
|
264
|
-
javaUrl: javaUrl,
|
|
265
|
-
sourceId: getSourceId()
|
|
266
|
-
}
|
|
267
|
-
}).then(response => {
|
|
268
|
-
// 生成文件
|
|
269
|
-
this.createFile(this.projectName, response.data)
|
|
254
|
+
this.$confirm(`确定在【${javaUrl}】下生成文件?`, '提示', {
|
|
255
|
+
confirmButtonText: '确定',
|
|
256
|
+
type: 'warning'
|
|
257
|
+
}).then(() => {
|
|
258
|
+
this.doGenerateCode()
|
|
259
|
+
});
|
|
260
|
+
},
|
|
261
|
+
doGenerateCode() {
|
|
262
|
+
const tableList = []
|
|
263
|
+
for (let i = 0; i < this.selectedTables.length; i++) {
|
|
264
|
+
const selectedTable = this.selectedTables[i]
|
|
265
|
+
tableList.push({
|
|
266
|
+
fdName: selectedTable.fdName,
|
|
267
|
+
tableSchema: selectedTable.tableSchema
|
|
270
268
|
})
|
|
271
269
|
}
|
|
270
|
+
this.$request({
|
|
271
|
+
url: '/apd/dev/DevGenerateCode/getBackgroundCode',
|
|
272
|
+
method: 'post',
|
|
273
|
+
data: {
|
|
274
|
+
tableList: JSON.stringify(tableList),
|
|
275
|
+
createEntity: this.createEntity,
|
|
276
|
+
createEntityFD: this.createEntityFD,
|
|
277
|
+
createController: this.createController,
|
|
278
|
+
createService: this.createService,
|
|
279
|
+
createDao: this.createDao,
|
|
280
|
+
createXml: this.createXml,
|
|
281
|
+
javaUrl: this.userConfig.fdJavaPath,
|
|
282
|
+
sourceId: this.userConfig.fdSourceId
|
|
283
|
+
}
|
|
284
|
+
}).then(response => {
|
|
285
|
+
// 生成文件
|
|
286
|
+
this.createFile(this.userConfig.fdJavaHref, response.data)
|
|
287
|
+
})
|
|
272
288
|
}
|
|
273
289
|
}
|
|
290
|
+
}
|
|
274
291
|
</script>
|
|
275
292
|
|
|
276
293
|
<style scoped>
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
294
|
+
.item-ctn {
|
|
295
|
+
border-bottom: 1px solid #e9ecf1;
|
|
296
|
+
margin-bottom: 5px;
|
|
297
|
+
padding-bottom: 10px;
|
|
298
|
+
}
|
|
282
299
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
300
|
+
.title-span {
|
|
301
|
+
font-weight: bold;
|
|
302
|
+
color: #4f4f4f;
|
|
303
|
+
}
|
|
287
304
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
305
|
+
.create-item {
|
|
306
|
+
padding: 5px;
|
|
307
|
+
}
|
|
291
308
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
309
|
+
.create-item-span {
|
|
310
|
+
width: 90px;
|
|
311
|
+
float: left;
|
|
312
|
+
}
|
|
296
313
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
314
|
+
.msg {
|
|
315
|
+
color: #1890ff;
|
|
316
|
+
}
|
|
300
317
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
318
|
+
.dev-tree-node-left {
|
|
319
|
+
font-size: 15px;
|
|
320
|
+
width: 60%;
|
|
321
|
+
float: left;
|
|
322
|
+
}
|
|
306
323
|
</style>
|