Files
vue3-element-admin/src/views/codegen/components/TableList.vue
T
Ray.Hao b5bacd2cbf feat(oidc): 接入统一认证登录与身份自助绑定
- 登录页接入统一认证入口并处理认证回调
- 个人中心新增认证身份区块,支持自助绑定与解绑
- 头像菜单与应用中心新增认证身份入口
- 应用中心删除经营管理分组,业务系统卡片指向统一认证授权地址
- 用户管理页移除认证身份代绑入口与弹窗
- 身份关联接口从用户域移到认证域
2026-10-28 08:21:27 +08:00

139 lines
4.0 KiB
Vue

<template>
<el-card class="page-search" shadow="never">
<el-form ref="queryFormRef" :model="params" :inline="true">
<el-form-item prop="keywords" label="关键字">
<el-input
v-model="params.keywords"
placeholder="表名"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">
<template #icon><Search /></template>
搜索
</el-button>
<el-button @click="handleResetQuery">
<template #icon><Refresh /></template>
重置
</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="page-content" shadow="never">
<div class="page-table-wrapper">
<el-table
v-loading="loading"
:data="list"
class="page-table"
height="100%"
highlight-current-row
border
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="表名" prop="tableName" min-width="100" />
<el-table-column label="描述" prop="tableComment" width="150" />
<el-table-column label="存储引擎" align="center" prop="engine" />
<el-table-column label="排序规则" align="center" prop="tableCollation" />
<el-table-column label="创建时间" align="center" prop="createTime" />
<el-table-column fixed="right" label="操作" width="200">
<template #default="scope">
<el-button
type="primary"
size="small"
link
@click="emit('generate', scope.row.tableName)"
>
<template #icon><MagicStick /></template>
生成代码
</el-button>
<el-button
v-if="scope.row.isConfigured === TABLE_CONFIGURED"
type="danger"
size="small"
link
@click="emit('reset-config', scope.row.tableName)"
>
<template #icon><RefreshLeft /></template>
重置配置
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="params.pageNum"
v-model:limit="params.pageSize"
@pagination="fetchData"
/>
</el-card>
</template>
<script setup lang="ts">
import { onMounted } from "vue";
import { MagicStick, Refresh, RefreshLeft, Search } from "@element-plus/icons-vue";
import { ElMessage, ElMessageBox, type FormInstance } from "element-plus";
import GeneratorAPI from "@/api/codegen";
import type { TableItem, TableQuery } from "@/api/codegen";
import { usePageTable } from "@/composables";
// 表已配置代码生成(1:是;0:否)
const TABLE_CONFIGURED = 1;
/**
* 上抛生成与重置配置操作
*/
const emit = defineEmits<{
generate: [tableName: string];
"reset-config": [tableName: string];
}>();
const queryFormRef = ref<FormInstance>();
// ── 分页表格状态 ────────────────────────────────────────────
// 分页表格数据管理
const { loading, list, total, params, fetchData, handleQuery, handleResetQuery } = usePageTable<
TableItem,
TableQuery
>({
initialParams: {
pageNum: 1,
pageSize: 10,
},
request: GeneratorAPI.getTablePage,
onBeforeReset: () => queryFormRef.value?.resetFields(),
});
/**
* 重置指定表的代码生成配置
*
* @param tableName 表名
*/
async function handleResetConfig(tableName: string): Promise<void> {
try {
await ElMessageBox.confirm("确定要重置配置吗?", "提示", { type: "warning" });
} catch {
return;
}
await GeneratorAPI.resetGenConfig(tableName);
ElMessage.success("重置成功");
handleQuery();
}
onMounted(() => {
handleQuery();
});
/**
* 暴露查询与重置能力供父组件调用
*/
defineExpose({ handleQuery, handleResetConfig });
</script>