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 生成代码 */
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({
url: `${BASE_URL}/${tableNames}`,
method: 'post',
responseType: 'blob',
})
}

View File

@@ -3,6 +3,7 @@
<template #title>
{{ 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="onGenerator">生成源码</a-link>
</template>
<div class="preview-content">
<a-layout :has-sider="true">
@@ -71,7 +72,7 @@ import { Message, type TreeNodeData } from '@arco-design/web-vue'
import { useClipboard } from '@vueuse/core'
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 genPreviewList = ref<GeneratePreviewResp[]>([])
@@ -128,6 +129,11 @@ const assembleTree = (genPreview: GeneratePreviewResp) => {
// 下载
const onDownload = () => {
emit('download', [previewTableNames.value])
}
// 下载
const onGenerator = () => {
emit('generate', [previewTableNames.value])
}
// 校验文件类型

View File

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