|
|
@@ -1,91 +1,101 @@
|
|
|
<template>
|
|
|
- <div class="p-2">
|
|
|
+ <div class="gen-container">
|
|
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
|
|
- <div v-show="showSearch" class="mb-[10px]">
|
|
|
- <el-card shadow="hover">
|
|
|
- <el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
|
|
- <el-form-item label="数据源" prop="dataName">
|
|
|
- <el-select v-model="queryParams.dataName" filterable clearable placeholder="请选择/输入数据源名称">
|
|
|
- <el-option key="" label="全部" value="" />
|
|
|
- <el-option v-for="item in dataNameList" :key="item" :label="item" :value="item"> </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="表名称" prop="tableName">
|
|
|
- <el-input v-model="queryParams.tableName" placeholder="请输入表名称" clearable @keyup.enter="handleQuery" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="表描述" prop="tableComment">
|
|
|
- <el-input v-model="queryParams.tableComment" placeholder="请输入表描述" clearable @keyup.enter="handleQuery" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="创建时间" style="width: 308px">
|
|
|
- <el-date-picker
|
|
|
- v-model="dateRange"
|
|
|
- value-format="YYYY-MM-DD"
|
|
|
- type="daterange"
|
|
|
- range-separator="-"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- ></el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
|
|
- <el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
|
|
- </el-form-item>
|
|
|
+ <div v-show="showSearch" class="search-wrapper">
|
|
|
+ <el-card shadow="hover" class="search-card">
|
|
|
+ <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="80px">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="数据源" prop="dataName">
|
|
|
+ <el-select v-model="queryParams.dataName" filterable clearable placeholder="请选择数据源" style="width: 100%">
|
|
|
+ <el-option key="" label="全部" value="" />
|
|
|
+ <el-option v-for="item in dataNameList" :key="item" :label="item" :value="item"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="表名称" prop="tableName">
|
|
|
+ <el-input v-model="queryParams.tableName" placeholder="请输入表名称" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="表描述" prop="tableComment">
|
|
|
+ <el-input v-model="queryParams.tableComment" placeholder="请输入表描述" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="创建时间" prop="dateRange">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="dateRange"
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="-"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ style="width: 100%"
|
|
|
+ ></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24" class="search-btn-group">
|
|
|
+ <el-button type="primary" @click="handleQuery">搜索</el-button>
|
|
|
+ <el-button @click="resetQuery">重置</el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</el-form>
|
|
|
</el-card>
|
|
|
</div>
|
|
|
</transition>
|
|
|
|
|
|
- <el-card shadow="hover">
|
|
|
+ <el-card shadow="hover" class="table-card">
|
|
|
<template #header>
|
|
|
- <el-row :gutter="10" class="mb8">
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button v-hasPermi="['tool:gen:code']" type="primary" plain icon="Download" @click="handleGenTable()">生成</el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button v-hasPermi="['tool:gen:import']" type="info" plain icon="Upload" @click="openImportTable">导入</el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button v-hasPermi="['tool:gen:edit']" type="success" plain icon="Edit" :disabled="single" @click="handleEditTable()">修改</el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button v-hasPermi="['tool:gen:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()">
|
|
|
- 删除
|
|
|
- </el-button>
|
|
|
- </el-col>
|
|
|
- <right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
|
|
|
- </el-row>
|
|
|
+ <div class="card-header">
|
|
|
+ <div class="header-left">
|
|
|
+ <span class="header-title">代码生成列表</span>
|
|
|
+ </div>
|
|
|
+ <div class="header-right">
|
|
|
+ <el-button v-hasPermi="['tool:gen:code']" type="primary" size="small" @click="handleGenTable()">生成代码</el-button>
|
|
|
+ <el-button v-hasPermi="['tool:gen:import']" type="success" size="small" @click="openImportTable">导入表</el-button>
|
|
|
+ <el-button v-hasPermi="['tool:gen:edit']" type="warning" size="small" :disabled="single" @click="handleEditTable()">修改</el-button>
|
|
|
+ <el-button v-hasPermi="['tool:gen:remove']" type="danger" size="small" :disabled="multiple" @click="handleDelete()">删除</el-button>
|
|
|
+ <right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
- <el-table v-loading="loading" border :data="tableList" @selection-change="handleSelectionChange">
|
|
|
+ <el-table v-loading="loading" :data="tableList" stripe @selection-change="handleSelectionChange" class="gen-table">
|
|
|
<el-table-column type="selection" align="center" width="55"></el-table-column>
|
|
|
- <el-table-column label="序号" type="index" width="50" align="center">
|
|
|
+ <el-table-column label="序号" type="index" width="60" align="center">
|
|
|
<template #default="scope">
|
|
|
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="数据源" align="center" prop="dataName" :show-overflow-tooltip="true" />
|
|
|
- <el-table-column label="表名称" align="center" prop="tableName" :show-overflow-tooltip="true" />
|
|
|
- <el-table-column label="表描述" align="center" prop="tableComment" :show-overflow-tooltip="true" />
|
|
|
- <el-table-column label="实体" align="center" prop="className" :show-overflow-tooltip="true" />
|
|
|
+ <el-table-column label="数据源" align="center" prop="dataName" :show-overflow-tooltip="true" width="120">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-tag size="small" effect="plain">{{ row.dataName || '默认' }}</el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="表名称" align="center" prop="tableName" :show-overflow-tooltip="true" min-width="150">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span class="table-name">{{ row.tableName }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="表描述" align="center" prop="tableComment" :show-overflow-tooltip="true" min-width="150" />
|
|
|
+ <el-table-column label="实体类名" align="center" prop="className" :show-overflow-tooltip="true" min-width="150">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-tag type="info" size="small" effect="plain">{{ row.className }}</el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column label="创建时间" align="center" prop="createTime" width="160" />
|
|
|
<el-table-column label="更新时间" align="center" prop="updateTime" width="160" />
|
|
|
- <el-table-column label="操作" align="center" width="330" class-name="small-padding fixed-width">
|
|
|
+ <el-table-column label="操作" align="center" width="260" fixed="right">
|
|
|
<template #default="scope">
|
|
|
- <el-tooltip content="预览" placement="top">
|
|
|
- <el-button v-hasPermi="['tool:gen:preview']" link type="primary" icon="View" @click="handlePreview(scope.row)"></el-button>
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip content="编辑" placement="top">
|
|
|
- <el-button v-hasPermi="['tool:gen:edit']" link type="primary" icon="Edit" @click="handleEditTable(scope.row)"></el-button>
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip content="删除" placement="top">
|
|
|
- <el-button v-hasPermi="['tool:gen:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)"></el-button>
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip content="同步" placement="top">
|
|
|
- <el-button v-hasPermi="['tool:gen:edit']" link type="primary" icon="Refresh" @click="handleSynchDb(scope.row)"></el-button>
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip content="生成代码" placement="top">
|
|
|
- <el-button v-hasPermi="['tool:gen:code']" link type="primary" icon="Download" @click="handleGenTable(scope.row)"></el-button>
|
|
|
- </el-tooltip>
|
|
|
+ <el-button v-hasPermi="['tool:gen:preview']" link type="primary" size="small" @click="handlePreview(scope.row)">预览</el-button>
|
|
|
+ <el-button v-hasPermi="['tool:gen:edit']" link type="primary" size="small" @click="handleEditTable(scope.row)">编辑</el-button>
|
|
|
+ <el-button v-hasPermi="['tool:gen:edit']" link type="warning" size="small" @click="handleSynchDb(scope.row)">同步</el-button>
|
|
|
+ <el-button v-hasPermi="['tool:gen:code']" link type="success" size="small" @click="handleGenTable(scope.row)">生成</el-button>
|
|
|
+ <el-button v-hasPermi="['tool:gen:remove']" link type="danger" size="small" @click="handleDelete(scope.row)">删除</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
@@ -93,18 +103,23 @@
|
|
|
</el-card>
|
|
|
|
|
|
<!-- 预览界面 -->
|
|
|
- <el-dialog v-model="dialog.visible" :title="dialog.title" width="80%" top="5vh" append-to-body class="scrollbar">
|
|
|
- <el-tabs v-model="preview.activeName">
|
|
|
+ <el-dialog v-model="dialog.visible" :title="dialog.title" width="85%" top="5vh" append-to-body class="preview-dialog">
|
|
|
+ <el-tabs v-model="preview.activeName" type="border-card" class="preview-tabs">
|
|
|
<el-tab-pane
|
|
|
v-for="(value, key) in preview.data"
|
|
|
:key="value"
|
|
|
:label="key.substring(key.lastIndexOf('/') + 1, key.indexOf('.vm'))"
|
|
|
:name="key.substring(key.lastIndexOf('/') + 1, key.indexOf('.vm'))"
|
|
|
>
|
|
|
- <el-link v-copyText="value" v-copyText:callback="copyTextSuccess" :underline="false" icon="DocumentCopy" style="float: right">
|
|
|
- 复制
|
|
|
- </el-link>
|
|
|
- <highlightjs :code="value" />
|
|
|
+ <div class="code-header">
|
|
|
+ <span class="file-name">{{ key.substring(key.lastIndexOf('/') + 1, key.indexOf('.vm')) }}</span>
|
|
|
+ <el-button v-copyText="value" v-copyText:callback="copyTextSuccess" type="primary" size="small">
|
|
|
+ 复制代码
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ <div class="code-content">
|
|
|
+ <highlightjs :code="value" />
|
|
|
+ </div>
|
|
|
</el-tab-pane>
|
|
|
</el-tabs>
|
|
|
</el-dialog>
|
|
|
@@ -225,6 +240,10 @@ const handleSelectionChange = (selection: TableVO[]) => {
|
|
|
/** 修改按钮操作 */
|
|
|
const handleEditTable = (row?: TableVO) => {
|
|
|
const tableId = row?.tableId || ids.value[0];
|
|
|
+ if (!tableId) {
|
|
|
+ proxy?.$modal.msgError('请选择要修改的数据');
|
|
|
+ return;
|
|
|
+ }
|
|
|
router.push({ path: '/tool/gen-edit/index/' + tableId, query: { pageNum: queryParams.value.pageNum } });
|
|
|
};
|
|
|
/** 删除按钮操作 */
|
|
|
@@ -250,10 +269,131 @@ onMounted(() => {
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
-.el-tab-pane {
|
|
|
+.gen-container {
|
|
|
+ padding: 20px;
|
|
|
+ background-color: #f5f7fa;
|
|
|
+ min-height: calc(100vh - 84px);
|
|
|
+}
|
|
|
+
|
|
|
+.search-wrapper {
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.search-card {
|
|
|
+ :deep(.el-card__body) {
|
|
|
+ padding: 20px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.search-btn-group {
|
|
|
+ text-align: right;
|
|
|
+ padding-top: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.table-card {
|
|
|
+ :deep(.el-card__header) {
|
|
|
+ padding: 16px 20px;
|
|
|
+ border-bottom: 1px solid #f0f0f0;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.el-card__body) {
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.card-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ .header-left {
|
|
|
+ .header-title {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #303133;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .header-right {
|
|
|
+ display: flex;
|
|
|
+ gap: 8px;
|
|
|
+ align-items: center;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.gen-table {
|
|
|
+ :deep(.el-table__header) {
|
|
|
+ th {
|
|
|
+ background-color: #f5f7fa;
|
|
|
+ color: #606266;
|
|
|
+ font-weight: 600;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-name {
|
|
|
+ color: #409eff;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.preview-dialog {
|
|
|
+ :deep(.el-dialog__body) {
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.preview-tabs {
|
|
|
+ border: none;
|
|
|
+ box-shadow: none;
|
|
|
+
|
|
|
+ :deep(.el-tabs__header) {
|
|
|
+ background-color: #f5f7fa;
|
|
|
+ border-bottom: 1px solid #e4e7ed;
|
|
|
+ margin: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.el-tabs__content) {
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.el-tab-pane) {
|
|
|
+ background-color: #282c34;
|
|
|
+ min-height: 500px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.code-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 12px 20px;
|
|
|
+ background-color: #21252b;
|
|
|
+ border-bottom: 1px solid #181a1f;
|
|
|
+
|
|
|
+ .file-name {
|
|
|
+ color: #abb2bf;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.code-content {
|
|
|
+ padding: 20px;
|
|
|
background-color: #282c34;
|
|
|
- .el-link {
|
|
|
- color: #fff;
|
|
|
+ overflow-x: auto;
|
|
|
+
|
|
|
+ :deep(pre) {
|
|
|
+ margin: 0;
|
|
|
+ background-color: transparent !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(code) {
|
|
|
+ background-color: transparent !important;
|
|
|
+ color: #abb2bf;
|
|
|
+ font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
|
|
|
+ font-size: 13px;
|
|
|
+ line-height: 1.6;
|
|
|
}
|
|
|
}
|
|
|
</style>
|