108 lines
3.1 KiB
Vue
108 lines
3.1 KiB
Vue
<template>
|
||
<ContentWrap>
|
||
<!-- 列表 -->
|
||
<XTable @register="registerTable">
|
||
<template #toolbar_buttons>
|
||
<!-- 操作:导入 -->
|
||
<XButton
|
||
type="primary"
|
||
preIcon="ep:zoom-in"
|
||
:title="t('action.import')"
|
||
v-hasPermi="['infra:codegen:create']"
|
||
@click="openImportTable()"
|
||
/>
|
||
</template>
|
||
<template #actionbtns_default="{ row }">
|
||
<!-- 操作:预览 -->
|
||
<XTextButton
|
||
preIcon="ep:view"
|
||
:title="t('action.preview')"
|
||
v-hasPermi="['infra:codegen:query']"
|
||
@click="handlePreview(row)"
|
||
/>
|
||
<!-- 操作:编辑 -->
|
||
<XTextButton
|
||
preIcon="ep:edit"
|
||
:title="t('action.edit')"
|
||
v-hasPermi="['infra:codegen:update']"
|
||
@click="handleUpdate(row.id)"
|
||
/>
|
||
<!-- 操作:删除 -->
|
||
<XTextButton
|
||
preIcon="ep:delete"
|
||
:title="t('action.del')"
|
||
v-hasPermi="['infra:codegen:delete']"
|
||
@click="deleteData(row.id)"
|
||
/>
|
||
<!-- 操作:同步 -->
|
||
<XTextButton
|
||
preIcon="ep:refresh"
|
||
:title="t('action.sync')"
|
||
v-hasPermi="['infra:codegen:update']"
|
||
@click="handleSynchDb(row)"
|
||
/>
|
||
<!-- 操作:生成 -->
|
||
<XTextButton
|
||
preIcon="ep:download"
|
||
:title="t('action.generate')"
|
||
v-hasPermi="['infra:codegen:download']"
|
||
@click="handleGenTable(row)"
|
||
/>
|
||
</template>
|
||
</XTable>
|
||
</ContentWrap>
|
||
<!-- 弹窗:导入表 -->
|
||
<ImportTable ref="importRef" @ok="reload()" />
|
||
<!-- 弹窗:预览代码 -->
|
||
<Preview ref="previewRef" />
|
||
</template>
|
||
<script setup lang="ts" name="Codegen">
|
||
import download from '@/utils/download'
|
||
import * as CodegenApi from '@/api/infra/codegen'
|
||
import { CodegenTableVO } from '@/api/infra/codegen/types'
|
||
import { allSchemas } from './codegen.data'
|
||
import { ImportTable, Preview } from './components'
|
||
|
||
const { t } = useI18n() // 国际化
|
||
const message = useMessage() // 消息弹窗
|
||
const { push } = useRouter() // 路由跳转
|
||
// 列表相关的变量
|
||
const [registerTable, { reload, deleteData }] = useXTable({
|
||
allSchemas: allSchemas,
|
||
getListApi: CodegenApi.getCodegenTablePageApi,
|
||
deleteApi: CodegenApi.deleteCodegenTableApi
|
||
})
|
||
|
||
// 导入操作
|
||
const importRef = ref()
|
||
const openImportTable = () => {
|
||
importRef.value.show()
|
||
}
|
||
// 预览操作
|
||
const previewRef = ref()
|
||
const handlePreview = (row: CodegenTableVO) => {
|
||
previewRef.value.show(row)
|
||
}
|
||
// 编辑操作
|
||
const handleUpdate = (rowId: number) => {
|
||
push('/codegen/edit?id=' + rowId)
|
||
}
|
||
// 同步操作
|
||
const handleSynchDb = (row: CodegenTableVO) => {
|
||
// 基于 DB 同步
|
||
const tableName = row.tableName
|
||
message
|
||
.confirm('确认要强制同步' + tableName + '表结构吗?', t('common.reminder'))
|
||
.then(async () => {
|
||
await CodegenApi.syncCodegenFromDBApi(row.id)
|
||
message.success('同步成功')
|
||
})
|
||
}
|
||
|
||
// 生成代码操作
|
||
const handleGenTable = async (row: CodegenTableVO) => {
|
||
const res = await CodegenApi.downloadCodegenApi(row.id)
|
||
download.zip(res, 'codegen-' + row.className + '.zip')
|
||
}
|
||
</script>
|