Skip to content

Commit e6dac1e

Browse files
committed
REVIEW 代码预览(PreviewCode)
1 parent b1e74a1 commit e6dac1e

File tree

3 files changed

+57
-31
lines changed

3 files changed

+57
-31
lines changed

src/utils/tree.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ export const handleTree = (data: any[], id?: string, parentId?: string, children
276276
export const handleTree2 = (data, id, parentId, children, rootId) => {
277277
id = id || 'id'
278278
parentId = parentId || 'parentId'
279-
children = children || 'children'
279+
// children = children || 'children'
280280
rootId =
281281
rootId ||
282282
Math.min(
@@ -285,16 +285,16 @@ export const handleTree2 = (data, id, parentId, children, rootId) => {
285285
})
286286
) ||
287287
0
288-
//对源数据深度克隆
288+
// 对源数据深度克隆
289289
const cloneData = JSON.parse(JSON.stringify(data))
290-
//循环所有项
290+
// 循环所有项
291291
const treeData = cloneData.filter((father) => {
292292
const branchArr = cloneData.filter((child) => {
293-
//返回每一项的子级数组
293+
// 返回每一项的子级数组
294294
return father[id] === child[parentId]
295295
})
296296
branchArr.length > 0 ? (father.children = branchArr) : ''
297-
//返回第一层
297+
// 返回第一层
298298
return father[parentId] === rootId
299299
})
300300
return treeData !== '' ? treeData : data

src/views/infra/codegen/PreviewCode.vue

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
<template>
22
<Dialog
3-
:title="modelTitle"
3+
title="代码预览"
44
v-model="modelVisible"
55
align-center
6-
width="60%"
6+
width="80%"
77
class="app-infra-codegen-preview-container"
88
>
99
<div class="flex">
10-
<el-card class="w-1/4" :gutter="12" shadow="hover">
10+
<!-- 代码目录树 -->
11+
<el-card
12+
class="w-1/3"
13+
:gutter="12"
14+
shadow="hover"
15+
v-loading="loading"
16+
element-loading-text="生成文件目录中..."
17+
>
1118
<el-scrollbar height="calc(100vh - 88px - 40px - 50px)">
1219
<el-tree
1320
ref="treeRef"
@@ -20,7 +27,14 @@
2027
/>
2128
</el-scrollbar>
2229
</el-card>
23-
<el-card class="w-3/4 ml-3" :gutter="12" shadow="hover">
30+
<!-- 代码 -->
31+
<el-card
32+
class="w-2/3 ml-3"
33+
:gutter="12"
34+
shadow="hover"
35+
v-loading="loading"
36+
element-loading-text="加载代码中..."
37+
>
2438
<el-tabs v-model="preview.activeName">
2539
<el-tab-pane
2640
v-for="item in previewCodegen"
@@ -31,7 +45,9 @@
3145
<el-button text type="primary" class="float-right" @click="copy(item.code)">
3246
{{ t('common.copy') }}
3347
</el-button>
34-
<pre>{{ item.code }}</pre>
48+
<div v-highlight>
49+
<code>{{ item.code }}</code>
50+
</div>
3551
</el-tab-pane>
3652
</el-tabs>
3753
</el-card>
@@ -42,33 +58,53 @@
4258
import { useClipboard } from '@vueuse/core'
4359
import { handleTree2 } from '@/utils/tree'
4460
import * as CodegenApi from '@/api/infra/codegen'
45-
import { CodegenPreviewVO } from '@/api/infra/codegen/types'
46-
4761
const { t } = useI18n() // 国际化
4862
const message = useMessage() // 消息弹窗
4963
5064
const modelVisible = ref(false) // 弹窗的是否展示
51-
const modelTitle = ref('代码预览') // 弹窗的标题
52-
// ======== 显示页面 ========
65+
const loading = ref(false) // 加载中的状态
5366
const preview = reactive({
54-
fileTree: [],
55-
activeName: ''
67+
fileTree: [], // 文件树
68+
activeName: '' // 激活的文件名
5669
})
57-
const previewCodegen = ref<CodegenPreviewVO[]>()
70+
const previewCodegen = ref<CodegenApi.CodegenPreviewVO[]>()
5871
72+
/** 点击文件 */
5973
const handleNodeClick = async (data, node) => {
6074
if (node && !node.isLeaf) {
6175
return false
6276
}
6377
preview.activeName = data.id
6478
}
79+
6580
/** 生成 files 目录 **/
6681
interface filesType {
6782
id: string
6883
label: string
6984
parentId: string
7085
}
71-
const handleFiles = (datas: CodegenPreviewVO[]) => {
86+
87+
/** 打开弹窗 */
88+
const open = async (id: number) => {
89+
modelVisible.value = true
90+
try {
91+
loading.value = true
92+
// 生成代码
93+
const data = await CodegenApi.previewCodegen(id)
94+
previewCodegen.value = data
95+
// 处理文件
96+
let file = handleFiles(data)
97+
preview.fileTree = handleTree2(file, 'id', 'parentId', 'children', '/')
98+
// 点击首个文件
99+
preview.activeName = data[0].filePath
100+
} finally {
101+
loading.value = false
102+
}
103+
}
104+
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
105+
106+
/** 处理文件 */
107+
const handleFiles = (datas: CodegenApi.CodegenPreviewVO[]) => {
72108
let exists = {} // key:file 的 id;value:true
73109
let files: filesType[] = []
74110
// 遍历每个元素
@@ -130,6 +166,7 @@ const handleFiles = (datas: CodegenPreviewVO[]) => {
130166
}
131167
return files
132168
}
169+
133170
/** 复制 **/
134171
const copy = async (text: string) => {
135172
const { copy, copied, isSupported } = useClipboard({ source: text })
@@ -142,17 +179,6 @@ const copy = async (text: string) => {
142179
message.success(t('common.copySuccess'))
143180
}
144181
}
145-
146-
/** 打开弹窗 */
147-
const openModal = async (id: number) => {
148-
modelVisible.value = true
149-
const res = await CodegenApi.previewCodegen(id)
150-
let file = handleFiles(res)
151-
previewCodegen.value = res
152-
preview.fileTree = handleTree2(file, 'id', 'parentId', 'children', '/')
153-
preview.activeName = res[0].filePath
154-
}
155-
defineExpose({ openModal }) // 提供 openModal 方法,用于打开弹窗
156182
</script>
157183
<style lang="scss">
158184
.app-infra-codegen-preview-container {

src/views/infra/codegen/index.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ const resetQuery = () => {
187187
handleQuery()
188188
}
189189
190-
// 导入操作
190+
/** 导入操作 */
191191
const importRef = ref()
192192
const openImportTable = () => {
193193
importRef.value.open()
@@ -201,7 +201,7 @@ const handleUpdate = (id: number) => {
201201
/** 预览操作 */
202202
const previewRef = ref()
203203
const handlePreview = (row: CodegenApi.CodegenTableVO) => {
204-
previewRef.value.openModal(row.id)
204+
previewRef.value.open(row.id)
205205
}
206206
207207
/** 删除按钮操作 */

0 commit comments

Comments
 (0)