codeGenerateDialog.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <template>
  2. <div class="sys-codeGenerate-container">
  3. <el-dialog v-model="isShowDialog" :title="title" draggable width="700px">
  4. <el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="100px">
  5. <el-row :gutter="35">
  6. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  7. <el-form-item label="库定位器" prop="configId">
  8. <el-select clearable v-model="ruleForm.configId" placeholder="库名" filterable @change="DbChanged()">
  9. <el-option v-for="item in dbData" :key="item.configId" :label="item.configId" :value="item.configId" />
  10. </el-select>
  11. </el-form-item>
  12. </el-col>
  13. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  14. <el-form-item label="数据库类型" prop="dbType" :rules="[{ required: true, message: '描述不能为空', trigger: 'blur' }]">
  15. <el-input v-model="ruleForm.dbTypeString" disabled />
  16. </el-form-item>
  17. </el-col>
  18. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  19. <el-form-item label="链接串" prop="connectionString">
  20. <el-input v-model="ruleForm.connectionString" disabled clearable type="textarea" />
  21. </el-form-item>
  22. </el-col>
  23. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  24. <el-form-item label="生成表" prop="tableName" :rules="[{ required: true, message: '生成表不能为空', trigger: 'blur' }]">
  25. <el-select v-model="ruleForm.tableName" class="m-2" filterable clearable>
  26. <el-option v-for="item in tableData" :key="item.entityName" :label="item.tableName" :value="item.entityName" />
  27. </el-select>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  31. <el-form-item label="业务名" prop="busName">
  32. <el-input v-model="ruleForm.busName" placeholder="请输入" clearable />
  33. </el-form-item>
  34. </el-col>
  35. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  36. <el-form-item label="父级菜单" prop="menuPid">
  37. <el-cascader
  38. :options="menuData"
  39. :props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'title' }"
  40. placeholder="请选择上级菜单"
  41. clearable
  42. class="w100"
  43. v-model="ruleForm.menuPid"
  44. >
  45. <template #default="{ node, data }">
  46. <span>{{ data.title }}</span>
  47. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  48. </template>
  49. </el-cascader>
  50. </el-form-item>
  51. </el-col>
  52. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  53. <el-form-item label="命名空间" prop="nameSpace">
  54. <el-input v-model="ruleForm.nameSpace" clearable placeholder="请输入" />
  55. </el-form-item>
  56. </el-col>
  57. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  58. <el-form-item label="作者姓名" prop="authorName">
  59. <el-input v-model="ruleForm.authorName" clearable placeholder="请输入" />
  60. </el-form-item>
  61. </el-col>
  62. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  63. <el-form-item label="生成方式" prop="generateType">
  64. <el-select v-model="ruleForm.generateType" class="m-2" filterable clearable>
  65. <el-option v-for="item in codeGenerateTypeList" :key="item.value" :label="item.label" :value="item.value" />
  66. </el-select>
  67. </el-form-item>
  68. </el-col>
  69. </el-row>
  70. </el-form>
  71. <template #footer>
  72. <span class="dialog-footer">
  73. <el-button @click="cancel" size="default">取 消</el-button>
  74. <el-button type="primary" @click="submit" size="default">确 定</el-button>
  75. </span>
  76. </template>
  77. </el-dialog>
  78. </div>
  79. </template>
  80. <script lang="ts">
  81. import { reactive, toRefs, onMounted, defineComponent, getCurrentInstance, ref } from 'vue';
  82. import { getDatabaseList, getTableList, addGenerate, updateGenerate } from '/@/api/system/admin';
  83. import { AddCodeGenInput, DbTableInfo } from '/@/api/system/interface';
  84. export default defineComponent({
  85. name: 'codeGenerateDialog',
  86. components: {},
  87. props: {
  88. title: {
  89. type: String,
  90. default: '',
  91. },
  92. menuData: {
  93. type: Array,
  94. default: () => [],
  95. },
  96. codeGenerateTypeList: {
  97. type: Array,
  98. default: () => [] as any,
  99. },
  100. },
  101. setup() {
  102. const { proxy } = getCurrentInstance() as any;
  103. const ruleFormRef = ref();
  104. const state = reactive({
  105. isShowDialog: false,
  106. ruleForm: {} as AddCodeGenInput,
  107. tableData: [] as any,
  108. dbData: [] as any,
  109. });
  110. onMounted(async () => {
  111. var res = await getDatabaseList();
  112. state.dbData = res.data.result;
  113. });
  114. // DbChanged
  115. const DbChanged = async () => {
  116. if (state.ruleForm.configId === '') return;
  117. let res = await getTableList(state.ruleForm.configId as string);
  118. state.tableData = res.data.result ?? [];
  119. let db = state.dbData.filter((u: any) => u.configId == state.ruleForm.configId);
  120. state.ruleForm.connectionString = db[0].connectionString;
  121. state.ruleForm.dbType = db[0].dbType.toString();
  122. state.ruleForm.dbTypeString = convertDbType(db[0].dbType);
  123. };
  124. // 打开弹窗
  125. const openDialog = (addRow: AddCodeGenInput) => {
  126. state.ruleForm = addRow;
  127. if (state.ruleForm .type === '1') {
  128. state.ruleForm.nameSpace = 'Admin.NET.Application';
  129. state.ruleForm.authorName = 'one';
  130. state.ruleForm.generateType = '2';
  131. } else {
  132. state.ruleForm.dbTypeString = convertDbType(parseInt(state.ruleForm.dbType));
  133. }
  134. state.isShowDialog = true;
  135. };
  136. // 关闭弹窗
  137. const closeDialog = () => {
  138. proxy.mittBus.emit('submitRefresh');
  139. state.isShowDialog = false;
  140. };
  141. // 取消
  142. const cancel = () => {
  143. state.isShowDialog = false;
  144. };
  145. // 提交
  146. const submit = () => {
  147. ruleFormRef.value.validate(async (valid: boolean) => {
  148. if (!valid) return;
  149. if (state.ruleForm.type === '1') {
  150. await addGenerate(state.ruleForm);
  151. } else {
  152. await updateGenerate(state.ruleForm);
  153. }
  154. closeDialog();
  155. });
  156. };
  157. const convertDbType = (dbType: number) => {
  158. let result = '';
  159. switch (dbType) {
  160. case 0:
  161. result = 'MySql';
  162. break;
  163. case 1:
  164. result = 'SqlServer';
  165. break;
  166. case 2:
  167. result = 'Sqlite';
  168. break;
  169. case 3:
  170. result = 'Oracle';
  171. break;
  172. case 4:
  173. result = 'PostgreSql';
  174. break;
  175. case 5:
  176. result = 'Dm';
  177. break;
  178. case 6:
  179. result = 'Kdbndp';
  180. break;
  181. case 7:
  182. result = 'Oscar';
  183. break;
  184. case 8:
  185. result = 'MySqlConnector';
  186. break;
  187. case 9:
  188. result = 'Access';
  189. break;
  190. default:
  191. result = 'Custom';
  192. break;
  193. }
  194. return result;
  195. };
  196. const isOrNotSelect = () => {
  197. return [
  198. {
  199. label: '是',
  200. value: 1,
  201. },
  202. {
  203. label: '否',
  204. value: 0,
  205. },
  206. ];
  207. };
  208. return {
  209. ruleFormRef,
  210. openDialog,
  211. closeDialog,
  212. cancel,
  213. submit,
  214. ...toRefs(state),
  215. convertDbType,
  216. isOrNotSelect,
  217. DbChanged,
  218. };
  219. },
  220. });
  221. </script>