中国算力平台算力登记系统2.0
yanzhaofeige
2024-09-30 0f03e47899d7fd52ab5c7ad11a3bc5d4eec413cb
commit | author | age
43dc29 1 <template>
Y 2   <div class="app-container">
3     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
4       <el-form-item label="表名称" prop="tableName">
5         <el-input
6           v-model="queryParams.tableName"
7           placeholder="请输入表名称"
8           clearable
9           @keyup.enter.native="handleQuery"
10         />
11       </el-form-item>
12       <el-form-item label="表描述" prop="tableComment">
13         <el-input
14           v-model="queryParams.tableComment"
15           placeholder="请输入表描述"
16           clearable
17           @keyup.enter.native="handleQuery"
18         />
19       </el-form-item>
20       <el-form-item label="创建时间">
21         <el-date-picker
22           v-model="dateRange"
23           style="width: 240px"
24           value-format="yyyy-MM-dd"
25           type="daterange"
26           range-separator="-"
27           start-placeholder="开始日期"
28           end-placeholder="结束日期"
29         ></el-date-picker>
30       </el-form-item>
31       <el-form-item>
32         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
33         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
34       </el-form-item>
35     </el-form>
36
37     <el-row :gutter="10" class="mb8">
38       <el-col :span="1.5">
39         <el-button
40           type="primary"
41           plain
42           icon="el-icon-download"
43           size="mini"
44           :disabled="multiple"
45           @click="handleGenTable"
46           v-hasPermi="['tool:gen:code']"
47         >生成</el-button>
48       </el-col>
49       <el-col :span="1.5">
50         <el-button
51           type="primary"
52           plain
53           icon="el-icon-plus"
54           size="mini"
55           @click="openCreateTable"
56           v-hasRole="['admin']"
57         >创建</el-button>
58       </el-col>
59       <el-col :span="1.5">
60         <el-button
61           type="info"
62           plain
63           icon="el-icon-upload"
64           size="mini"
65           @click="openImportTable"
66           v-hasPermi="['tool:gen:import']"
67         >导入</el-button>
68       </el-col>
69       <el-col :span="1.5">
70         <el-button
71           type="success"
72           plain
73           icon="el-icon-edit"
74           size="mini"
75           :disabled="single"
76           @click="handleEditTable"
77           v-hasPermi="['tool:gen:edit']"
78         >修改</el-button>
79       </el-col>
80       <el-col :span="1.5">
81         <el-button
82           type="danger"
83           plain
84           icon="el-icon-delete"
85           size="mini"
86           :disabled="multiple"
87           @click="handleDelete"
88           v-hasPermi="['tool:gen:remove']"
89         >删除</el-button>
90       </el-col>
91       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
92     </el-row>
93
94     <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
95       <el-table-column type="selection" align="center" width="55"></el-table-column>
96       <el-table-column label="序号" type="index" width="50" align="center">
97         <template slot-scope="scope">
98           <span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>
99         </template>
100       </el-table-column>
101       <el-table-column
102         label="表名称"
103         align="center"
104         prop="tableName"
105         :show-overflow-tooltip="true"
106         width="120"
107       />
108       <el-table-column
109         label="表描述"
110         align="center"
111         prop="tableComment"
112         :show-overflow-tooltip="true"
113         width="120"
114       />
115       <el-table-column
116         label="实体"
117         align="center"
118         prop="className"
119         :show-overflow-tooltip="true"
120         width="120"
121       />
122       <el-table-column label="创建时间" align="center" prop="createTime" width="160" />
123       <el-table-column label="更新时间" align="center" prop="updateTime" width="160" />
124       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
125         <template slot-scope="scope">
126           <el-button
127             type="text"
128             size="small"
129             icon="el-icon-view"
130             @click="handlePreview(scope.row)"
131             v-hasPermi="['tool:gen:preview']"
132           >预览</el-button>
133           <el-button
134             type="text"
135             size="small"
136             icon="el-icon-edit"
137             @click="handleEditTable(scope.row)"
138             v-hasPermi="['tool:gen:edit']"
139           >编辑</el-button>
140           <el-button
141             type="text"
142             size="small"
143             icon="el-icon-delete"
144             @click="handleDelete(scope.row)"
145             v-hasPermi="['tool:gen:remove']"
146           >删除</el-button>
147           <el-button
148             type="text"
149             size="small"
150             icon="el-icon-refresh"
151             @click="handleSynchDb(scope.row)"
152             v-hasPermi="['tool:gen:edit']"
153           >同步</el-button>
154           <el-button
155             type="text"
156             size="small"
157             icon="el-icon-download"
158             @click="handleGenTable(scope.row)"
159             v-hasPermi="['tool:gen:code']"
160           >生成代码</el-button>
161         </template>
162       </el-table-column>
163     </el-table>
164     <pagination
165       v-show="total>0"
166       :total="total"
167       :page.sync="queryParams.pageNum"
168       :limit.sync="queryParams.pageSize"
169       @pagination="getList"
170     />
171     <!-- 预览界面 -->
172     <el-dialog :title="preview.title" :visible.sync="preview.open" width="80%" top="5vh" append-to-body class="scrollbar">
173       <el-tabs v-model="preview.activeName">
174         <el-tab-pane
175           v-for="(value, key) in preview.data"
176           :label="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
177           :name="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
178           :key="key"
179         >
180           <el-link :underline="false" icon="el-icon-document-copy" v-clipboard:copy="value" v-clipboard:success="clipboardSuccess" style="float:right">复制</el-link>
181           <pre><code class="hljs" v-html="highlightedCode(value, key)"></code></pre>
182         </el-tab-pane>
183       </el-tabs>
184     </el-dialog>
185     <import-table ref="import" @ok="handleQuery" />
186     <create-table ref="create" @ok="handleQuery" />
187   </div>
188 </template>
189
190 <script>
191 import { listTable, previewTable, delTable, genCode, synchDb } from "@/api/tool/gen";
192 import importTable from "./importTable";
193 import createTable from "./createTable";
194 import hljs from "highlight.js/lib/highlight";
195 import "highlight.js/styles/github-gist.css";
196 hljs.registerLanguage("java", require("highlight.js/lib/languages/java"));
197 hljs.registerLanguage("xml", require("highlight.js/lib/languages/xml"));
198 hljs.registerLanguage("html", require("highlight.js/lib/languages/xml"));
199 hljs.registerLanguage("vue", require("highlight.js/lib/languages/xml"));
200 hljs.registerLanguage("javascript", require("highlight.js/lib/languages/javascript"));
201 hljs.registerLanguage("sql", require("highlight.js/lib/languages/sql"));
202
203 export default {
204   name: "Gen",
205   components: { importTable, createTable },
206   data() {
207     return {
208       // 遮罩层
209       loading: true,
210       // 唯一标识符
211       uniqueId: "",
212       // 选中数组
213       ids: [],
214       // 选中表数组
215       tableNames: [],
216       // 非单个禁用
217       single: true,
218       // 非多个禁用
219       multiple: true,
220       // 显示搜索条件
221       showSearch: true,
222       // 总条数
223       total: 0,
224       // 表数据
225       tableList: [],
226       // 日期范围
227       dateRange: "",
228       // 查询参数
229       queryParams: {
230         pageNum: 1,
231         pageSize: 10,
232         tableName: undefined,
233         tableComment: undefined
234       },
235       // 预览参数
236       preview: {
237         open: false,
238         title: "代码预览",
239         data: {},
240         activeName: "domain.java"
241       }
242     };
243   },
244   created() {
245     this.getList();
246   },
247   activated() {
248     const time = this.$route.query.t;
249     if (time != null && time != this.uniqueId) {
250       this.uniqueId = time;
251       this.queryParams.pageNum = Number(this.$route.query.pageNum);
252       this.getList();
253     }
254   },
255   methods: {
256     /** 查询表集合 */
257     getList() {
258       this.loading = true;
259       listTable(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
260           this.tableList = response.rows;
261           this.total = response.total;
262           this.loading = false;
263         }
264       );
265     },
266     /** 搜索按钮操作 */
267     handleQuery() {
268       this.queryParams.pageNum = 1;
269       this.getList();
270     },
271     /** 生成代码操作 */
272     handleGenTable(row) {
273       const tableNames = row.tableName || this.tableNames;
274       if (tableNames == "") {
275         this.$modal.msgError("请选择要生成的数据");
276         return;
277       }
278       if(row.genType === "1") {
279         genCode(row.tableName).then(response => {
280           this.$modal.msgSuccess("成功生成到自定义路径:" + row.genPath);
281         });
282       } else {
283         this.$download.zip("/tool/gen/batchGenCode?tables=" + tableNames, "ruoyi.zip");
284       }
285     },
286     /** 同步数据库操作 */
287     handleSynchDb(row) {
288       const tableName = row.tableName;
289       this.$modal.confirm('确认要强制同步"' + tableName + '"表结构吗?').then(function() {
290         return synchDb(tableName);
291       }).then(() => {
292         this.$modal.msgSuccess("同步成功");
293       }).catch(() => {});
294     },
295     /** 打开导入表弹窗 */
296     openImportTable() {
297       this.$refs.import.show();
298     },
299     /** 打开创建表弹窗 */
300     openCreateTable() {
301       this.$refs.create.show();
302     },
303     /** 重置按钮操作 */
304     resetQuery() {
305       this.dateRange = [];
306       this.resetForm("queryForm");
307       this.handleQuery();
308     },
309     /** 预览按钮 */
310     handlePreview(row) {
311       previewTable(row.tableId).then(response => {
312         this.preview.data = response.data;
313         this.preview.open = true;
314         this.preview.activeName = "domain.java";
315       });
316     },
317     /** 高亮显示 */
318     highlightedCode(code, key) {
319       const vmName = key.substring(key.lastIndexOf("/") + 1, key.indexOf(".vm"));
320       var language = vmName.substring(vmName.indexOf(".") + 1, vmName.length);
321       const result = hljs.highlight(language, code || "", true);
322       return result.value || '&nbsp;';
323     },
324     /** 复制代码成功 */
325     clipboardSuccess() {
326       this.$modal.msgSuccess("复制成功");
327     },
328     // 多选框选中数据
329     handleSelectionChange(selection) {
330       this.ids = selection.map(item => item.tableId);
331       this.tableNames = selection.map(item => item.tableName);
332       this.single = selection.length != 1;
333       this.multiple = !selection.length;
334     },
335     /** 修改按钮操作 */
336     handleEditTable(row) {
337       const tableId = row.tableId || this.ids[0];
338       const tableName = row.tableName || this.tableNames[0];
339       const params = { pageNum: this.queryParams.pageNum };
340       this.$tab.openPage("修改[" + tableName + "]生成配置", '/tool/gen-edit/index/' + tableId, params);
341     },
342     /** 删除按钮操作 */
343     handleDelete(row) {
344       const tableIds = row.tableId || this.ids;
345       this.$modal.confirm('是否确认删除表编号为"' + tableIds + '"的数据项?').then(function() {
346         return delTable(tableIds);
347       }).then(() => {
348         this.getList();
349         this.$modal.msgSuccess("删除成功");
350       }).catch(() => {});
351     }
352   }
353 };
354 </script>