mirror of
https://github.com/continew-org/continew-admin-ui.git
synced 2025-11-05 08:57:10 +08:00
feat(generator): 源项目内生成代码 (#44)
This commit is contained in:
@@ -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',
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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])
|
||||||
}
|
}
|
||||||
// 校验文件类型
|
// 校验文件类型
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user