feat: 代码生成

This commit is contained in:
dap 2024-09-24 11:38:51 +08:00
parent c1e58831e1
commit 358efd9630

View File

@ -1,6 +1,7 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
import type { ColumnsType } from 'ant-design-vue/es/table';
import type { Key } from 'ant-design-vue/es/table/interface';
import { onMounted, ref } from 'vue';
import { useRouter } from 'vue-router';
@ -69,6 +70,30 @@ async function handleSync(record: Recordable<any>) {
// reload
}
const selectedRowKeys = ref<string[]>([]);
function handleSelectChange(selectedKeys: Key[]) {
selectedRowKeys.value = selectedKeys as string[];
}
/**
* 批量生成代码
*/
async function handleBatchGen() {
if (selectedRowKeys.value.length === 0) {
message.info('请选择需要生成代码的表');
return;
}
const hideLoading = message.loading('下载中...');
try {
const params = selectedRowKeys.value.join(',');
const data = await batchGenCode(params);
const timestamp = Date.now();
downloadByData(data, `批量代码生成_${timestamp}.zip`);
} finally {
hideLoading();
}
}
async function handleDownload(record: Recordable<any>) {
const hideLoading = message.loading('下载中...');
try {
@ -82,6 +107,10 @@ async function handleDownload(record: Recordable<any>) {
}
}
/**
* 删除
* @param record
*/
async function handleDelete(record: Recordable<any>) {
await genRemove(record.tableId);
// reload
@ -112,39 +141,76 @@ const [QueryForm] = useVbenForm({
<Card>
<QueryForm />
</Card>
<Table :columns="columns" :data-source="dataSource" e="middle">
<template #bodyCell="{ record, column }">
<template v-if="column.dataIndex === 'action'">
<a-button size="small" type="link" @click="handlePreview(record)">
{{ $t('pages.common.preview') }}
</a-button>
<a-button size="small" type="link" @click="handleEdit(record)">
{{ $t('pages.common.edit') }}
</a-button>
<Popconfirm
:title="`确认同步[${record.tableName}]?`"
placement="left"
@confirm="handleSync(record)"
<Card
:body-style="{
padding: '12px',
display: 'flex',
flexDirection: 'column',
gap: '12px',
}"
>
<div class="flex justify-between">
<span class="text-lg font-bold">代码生成列表</span>
<div class="flex gap-[8px]">
<a-button
:disabled="selectedRowKeys.length === 0"
danger
type="primary"
>
<a-button size="small" type="link">
{{ $t('pages.common.sync') }}
</a-button>
</Popconfirm>
<a-button size="small" type="link" @click="handleDownload(record)">
生成代码
删除
</a-button>
<Popconfirm
:title="`确认删除[${record.tableName}]?`"
placement="left"
@confirm="handleDelete(record)"
<a-button
:disabled="selectedRowKeys.length === 0"
@click="handleBatchGen"
>
<a-button danger size="small" type="link">
{{ $t('pages.common.delete') }}
{{ $t('pages.common.generate') }}
</a-button>
<a-button type="primary">
{{ $t('pages.common.import') }}
</a-button>
</div>
</div>
<Table
:columns="columns"
:data-source="dataSource"
:row-selection="{ selectedRowKeys, onChange: handleSelectChange }"
row-key="tableId"
size="middle"
>
<template #bodyCell="{ record, column }">
<template v-if="column.dataIndex === 'action'">
<a-button size="small" type="link" @click="handlePreview(record)">
{{ $t('pages.common.preview') }}
</a-button>
</Popconfirm>
<a-button size="small" type="link" @click="handleEdit(record)">
{{ $t('pages.common.edit') }}
</a-button>
<Popconfirm
:title="`确认同步[${record.tableName}]?`"
placement="left"
@confirm="handleSync(record)"
>
<a-button size="small" type="link">
{{ $t('pages.common.sync') }}
</a-button>
</Popconfirm>
<a-button size="small" type="link" @click="handleDownload(record)">
生成代码
</a-button>
<Popconfirm
:title="`确认删除[${record.tableName}]?`"
placement="left"
@confirm="handleDelete(record)"
>
<a-button danger size="small" type="link">
{{ $t('pages.common.delete') }}
</a-button>
</Popconfirm>
</template>
</template>
</template>
</Table>
</Table>
</Card>
<CodePreviewModal />
</Page>
</template>