feat(generator): 源项目内生成代码 (#44)

This commit is contained in:
luoqiz
2025-01-12 22:31:32 +08:00
committed by GitHub
parent 8c55504bf8
commit 14cc54d97f
3 changed files with 31 additions and 7 deletions

View File

@@ -32,11 +32,19 @@ export function genPreview(tableNames: Array<string>) {
} }
/** @desc 生成代码 */ /** @desc 生成代码 */
export function generate(tableNames: Array<string>) { export function downloadCode(tableNames: Array<string>) {
return http.requestNative({
url: `${BASE_URL}/${tableNames}/download`,
method: 'post',
responseType: 'blob',
})
}
/** @desc 生成代码 */
export function generateCode(tableNames: Array<string>) {
return http.requestNative({ return http.requestNative({
url: `${BASE_URL}/${tableNames}`, url: `${BASE_URL}/${tableNames}`,
method: 'post', method: 'post',
responseType: 'blob',
}) })
} }

View File

@@ -3,6 +3,7 @@
<template #title> <template #title>
{{ previewTableNames.length === 1 ? `生成 ${previewTableNames[0]} 表预览` : '批量生成预览' }} {{ previewTableNames.length === 1 ? `生成 ${previewTableNames[0]} 表预览` : '批量生成预览' }}
<a-link v-permission="['code:generator:generate']" style="margin-left: 10px" icon @click="onDownload">下载源码</a-link> <a-link v-permission="['code:generator:generate']" style="margin-left: 10px" icon @click="onDownload">下载源码</a-link>
<a-link v-permission="['code:generator:generate']" style="margin-left: 10px" icon @click="onGenerator">生成源码</a-link>
</template> </template>
<div class="preview-content"> <div class="preview-content">
<a-layout :has-sider="true"> <a-layout :has-sider="true">
@@ -71,7 +72,7 @@ import { Message, type TreeNodeData } from '@arco-design/web-vue'
import { useClipboard } from '@vueuse/core' import { useClipboard } from '@vueuse/core'
import { type GeneratePreviewResp, genPreview } from '@/apis/code/generator' import { type GeneratePreviewResp, genPreview } from '@/apis/code/generator'
const emit = defineEmits<{ (e: 'generate', previewTableNames: string[]): void }>() const emit = defineEmits([ 'download','generate'])
const { copy, copied } = useClipboard() const { copy, copied } = useClipboard()
const genPreviewList = ref<GeneratePreviewResp[]>([]) const genPreviewList = ref<GeneratePreviewResp[]>([])
@@ -128,6 +129,11 @@ const assembleTree = (genPreview: GeneratePreviewResp) => {
// 下载 // 下载
const onDownload = () => { const onDownload = () => {
emit('download', [previewTableNames.value])
}
// 下载
const onGenerator = () => {
emit('generate', [previewTableNames.value]) emit('generate', [previewTableNames.value])
} }
// 校验文件类型 // 校验文件类型

View File

@@ -56,13 +56,14 @@
</GiTable> </GiTable>
<GenConfigDrawer ref="GenConfigDrawerRef" @save-success="search" /> <GenConfigDrawer ref="GenConfigDrawerRef" @save-success="search" />
<GenPreviewModal ref="GenPreviewModalRef" @generate="onGenerate" /> <GenPreviewModal ref="GenPreviewModalRef" @generate="onGenerate" @download="onDownload" />
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Message } from '@arco-design/web-vue'
import GenConfigDrawer from './GenConfigDrawer.vue' import GenConfigDrawer from './GenConfigDrawer.vue'
import { generate, listGenConfig } from '@/apis/code/generator' import { downloadCode, generateCode, listGenConfig } from '@/apis/code/generator'
import type { TableInstanceColumns } from '@/components/GiTable/type' import type { TableInstanceColumns } from '@/components/GiTable/type'
import { useTable } from '@/hooks' import { useTable } from '@/hooks'
import { isMobile } from '@/utils' import { isMobile } from '@/utils'
@@ -125,8 +126,8 @@ const onPreview = (tableNames: Array<string>) => {
} }
// 生成 // 生成
const onGenerate = async (tableNames: Array<string>) => { const onDownload = async (tableNames: Array<string>) => {
const res = await generate(tableNames) const res = await downloadCode(tableNames)
const contentDisposition = res.headers['content-disposition'] const contentDisposition = res.headers['content-disposition']
const pattern = /filename=([^;]+\.[^.;]+);*/ const pattern = /filename=([^;]+\.[^.;]+);*/
const result = pattern.exec(contentDisposition) || '' const result = pattern.exec(contentDisposition) || ''
@@ -148,6 +149,15 @@ const onGenerate = async (tableNames: Array<string>) => {
// 释放掉 blob 对象 // 释放掉 blob 对象
window.URL.revokeObjectURL(href) window.URL.revokeObjectURL(href)
} }
// 生成
const onGenerate = async (tableNames: Array<string>) => {
const res = await generateCode(tableNames)
if(res.code === 0){
Message.success('代码生成成功')
}
}
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>