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