index.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <template>
  2. <div class="sys-codeGen-container">
  3. <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
  4. <el-form :model="state.queryParams" ref="queryForm" :inline="true">
  5. <el-row :gutter="35">
  6. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  7. <el-form-item label="业务名" prop="busName">
  8. <el-input placeholder="业务名" clearable @keyup.enter="handleQuery" v-model="state.queryParams.busName" />
  9. </el-form-item>
  10. </el-col>
  11. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
  12. <el-form-item label="数据库表名" prop="tableName">
  13. <el-input placeholder="数据库表名" clearable @keyup.enter="handleQuery" v-model="state.queryParams.tableName" />
  14. </el-form-item>
  15. </el-col>
  16. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20 search-actions">
  17. <div>
  18. <el-button type="primary" icon="ele-Plus" @click="openAddDialog"> 增加 </el-button>
  19. </div>
  20. <div>
  21. <el-form-item>
  22. <el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
  23. <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysMenu:list'" plain> 查询 </el-button>
  24. </el-form-item>
  25. </div>
  26. </el-col>
  27. </el-row>
  28. </el-form>
  29. </el-card>
  30. <el-card shadow="hover" style="margin-top: 8px">
  31. <el-table :data="state.tableData" style="width: 100%" v-loading="state.loading" border>
  32. <el-table-column type="index" label="序号" width="55" align="center" />
  33. <el-table-column prop="configId" label="库定位器" show-overflow-tooltip />
  34. <el-table-column prop="tableName" label="表名称" show-overflow-tooltip />
  35. <el-table-column prop="busName" label="业务名" show-overflow-tooltip />
  36. <el-table-column prop="nameSpace" label="命名空间" show-overflow-tooltip />
  37. <el-table-column prop="authorName" label="作者姓名" show-overflow-tooltip />
  38. <el-table-column prop="generateType" label="生成方式" show-overflow-tooltip>
  39. <template #default="scope">
  40. <el-tag v-if="scope.row.generateType === 100"> 下载压缩包 </el-tag>
  41. <el-tag v-else-if="scope.row.generateType === 111"> 下载压缩包(前端) </el-tag>
  42. <el-tag v-else-if="scope.row.generateType === 121"> 下载压缩包(后端) </el-tag>
  43. <el-tag v-else-if="scope.row.generateType === 211"> 生成到本项目(前端) </el-tag>
  44. <el-tag v-else-if="scope.row.generateType === 221"> 生成到本项目(后端) </el-tag>
  45. <el-tag type="danger" v-else> 生成到本项目 </el-tag>
  46. </template>
  47. </el-table-column>
  48. <el-table-column label="操作" width="200" fixed="right" align="center" show-overflow-tooltip>
  49. <template #default="scope">
  50. <el-button size="small" text type="primary" @click="handleGenerate(scope.row)">开始生成</el-button>
  51. <el-button size="small" text type="primary" @click="openConfigDialog(scope.row)">配置</el-button>
  52. <el-button size="small" text type="primary" @click="openEditDialog(scope.row)">编辑</el-button>
  53. <el-button size="small" text type="primary" @click="deleConfig(scope.row)">删除</el-button>
  54. </template>
  55. </el-table-column>
  56. </el-table>
  57. <el-pagination
  58. v-model:currentPage="state.tableParams.page"
  59. v-model:page-size="state.tableParams.pageSize"
  60. :total="state.tableParams.total"
  61. :page-sizes="[10, 20, 50, 100]"
  62. small
  63. background
  64. @size-change="handleSizeChange"
  65. @current-change="handleCurrentChange"
  66. layout="total, sizes, prev, pager, next, jumper"
  67. />
  68. </el-card>
  69. <EditCodeGenDialog :title="state.editMenuTitle" ref="EditCodeGenRef" />
  70. <CodeConfigDialog ref="CodeConfigRef" />
  71. </div>
  72. </template>
  73. <script lang="ts" setup name="sysCodeGen">
  74. import { onMounted, onUnmounted, reactive, ref } from 'vue';
  75. import { ElMessageBox, ElMessage } from 'element-plus';
  76. import mittBus from '/@/utils/mitt';
  77. import EditCodeGenDialog from './component/editCodeGenDialog.vue';
  78. import CodeConfigDialog from './component/genConfigDialog.vue';
  79. import { downloadByUrl } from '/@/utils/download';
  80. import { getAPI } from '/@/utils/axios-utils';
  81. import { SysCodeGenApi } from '/@/api-services/api';
  82. import { SysCodeGen } from '/@/api-services/models';
  83. const EditCodeGenRef = ref<InstanceType<typeof EditCodeGenDialog>>();
  84. const CodeConfigRef = ref<InstanceType<typeof CodeConfigDialog>>();
  85. const state = reactive({
  86. loading: false,
  87. loading1: false,
  88. dbData: [] as any,
  89. configId: '',
  90. tableData: [] as Array<SysCodeGen>,
  91. tableName: '',
  92. queryParams: {
  93. name: undefined,
  94. code: undefined,
  95. tableName: undefined,
  96. busName: undefined,
  97. },
  98. tableParams: {
  99. page: 1,
  100. pageSize: 10,
  101. total: 0 as any,
  102. },
  103. editMenuTitle: '',
  104. });
  105. onMounted(async () => {
  106. handleQuery();
  107. mittBus.on('submitRefresh', () => {
  108. handleQuery();
  109. });
  110. mittBus.on('submitRefreshFk', () => {
  111. state.tableData;
  112. });
  113. });
  114. onUnmounted(() => {
  115. mittBus.off('submitRefresh', () => {});
  116. mittBus.off('submitRefreshFk', () => {});
  117. });
  118. const openConfigDialog = (row: any) => {
  119. CodeConfigRef.value?.openDialog(row);
  120. };
  121. // 重置操作
  122. const resetQuery = () => {
  123. state.queryParams.busName = undefined;
  124. state.queryParams.tableName = undefined;
  125. handleQuery();
  126. };
  127. // 表查询操作
  128. const handleQuery = async () => {
  129. state.loading = true;
  130. // let params = Object.assign(state.queryParams, state.tableParams);
  131. let res = await getAPI(SysCodeGenApi).apiSysCodeGenPageGet(
  132. undefined,
  133. undefined,
  134. undefined,
  135. undefined,
  136. undefined,
  137. undefined,
  138. undefined,
  139. undefined,
  140. state.queryParams.tableName,
  141. undefined,
  142. undefined,
  143. undefined,
  144. undefined,
  145. undefined,
  146. state.tableParams.page,
  147. state.tableParams.pageSize
  148. );
  149. state.tableData = res.data.result?.items ?? [];
  150. state.tableParams.total = res.data.result?.total;
  151. state.loading = false;
  152. };
  153. // 改变页面容量
  154. const handleSizeChange = (val: number) => {
  155. state.tableParams.pageSize = val;
  156. handleQuery();
  157. };
  158. // 改变页码序号
  159. const handleCurrentChange = (val: number) => {
  160. state.tableParams.page = val;
  161. handleQuery();
  162. };
  163. // 打开表增加页面
  164. const openAddDialog = () => {
  165. state.editMenuTitle = '增加';
  166. EditCodeGenRef.value?.openDialog({ nameSpace: 'Admin.NET.Application', authorName: 'Admin.NET', generateType: '200' });
  167. };
  168. // 打开表编辑页面
  169. const openEditDialog = (row: any) => {
  170. state.editMenuTitle = '编辑';
  171. EditCodeGenRef.value?.openDialog(row);
  172. };
  173. // 删除表
  174. const deleConfig = (row: any) => {
  175. ElMessageBox.confirm(`确定删除吗?`, '提示', {
  176. confirmButtonText: '确定',
  177. cancelButtonText: '取消',
  178. type: 'warning',
  179. })
  180. .then(async () => {
  181. await getAPI(SysCodeGenApi).apiSysCodeGenDeletePost([{ id: row.id }]);
  182. handleQuery();
  183. ElMessage.success('操作成功');
  184. })
  185. .catch(() => {});
  186. };
  187. // 开始生成代码
  188. const handleGenerate = (row: any) => {
  189. ElMessageBox.confirm(`确定要生成吗?`, '提示', {
  190. confirmButtonText: '确定',
  191. cancelButtonText: '取消',
  192. type: 'warning',
  193. })
  194. .then(async () => {
  195. var res=await getAPI(SysCodeGenApi).apiSysCodeGenRunLocalPost(row);
  196. if (res.data.result != null && res.data.result.url != null)
  197. downloadByUrl({ url: res.data.result.url });
  198. handleQuery();
  199. ElMessage.success('操作成功');
  200. })
  201. .catch(() => {});
  202. };
  203. </script>
  204. <style lang="scss" scoped>
  205. //搜索区域Label固定宽度
  206. .sys-codeGen-container{
  207. ::v-deep(.el-form-item__label) {
  208. width: 90px;
  209. }
  210. }
  211. </style>