genConfigDialog.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <template>
  2. <div class="sys-codeGenConfig-container">
  3. <el-dialog v-model="state.isShowDialog" title="配置" draggable width="100%">
  4. <el-table :data="state.tableData" style="width: 100%" v-loading="state.loading" border>
  5. <el-table-column type="index" label="序号" width="55" align="center" />
  6. <el-table-column prop="columnName" label="字段" show-overflow-tooltip />
  7. <el-table-column prop="columnComment" label="描述" show-overflow-tooltip>
  8. <template #default="scope">
  9. <el-input v-model="scope.row.columnComment" autocomplete="off" />
  10. </template>
  11. </el-table-column>
  12. <el-table-column prop="netType" label="数据类型" show-overflow-tooltip />
  13. <el-table-column prop="effectType" label="作用类型" show-overflow-tooltip>
  14. <template #default="scope">
  15. <el-select v-model="scope.row.effectType" class="m-2" placeholder="Select" :disabled="judgeColumns(scope.row)" @change="effectTypeChange(scope.row, scope.$index)">
  16. <el-option v-for="item in state.effectTypeList" :key="item.code" :label="item.value" :value="item.code" />
  17. </el-select>
  18. </template>
  19. </el-table-column>
  20. <el-table-column prop="dictTypeCode" label="字典" show-overflow-tooltip>
  21. <template #default="scope">
  22. <el-select v-model="scope.row.dictTypeCode" class="m-2" :disabled="effectTypeEnable(scope.row)">
  23. <el-option v-for="item in state.dictTypeCodeList" :key="item.code" :label="item.name" :value="item.code" />
  24. </el-select>
  25. </template>
  26. </el-table-column>
  27. <el-table-column prop="whetherTable" label="列表显示" align="center" show-overflow-tooltip>
  28. <template #default="scope">
  29. <el-checkbox v-model="scope.row.whetherTable" />
  30. </template>
  31. </el-table-column>
  32. <el-table-column prop="whetherAddUpdate" label="增改" align="center" show-overflow-tooltip>
  33. <template #default="scope">
  34. <el-checkbox v-model="scope.row.whetherAddUpdate" :disabled="judgeColumns(scope.row)" />
  35. </template>
  36. </el-table-column>
  37. <el-table-column prop="whetherRequired" label="必填" align="center" show-overflow-tooltip>
  38. <template #default="scope">
  39. <el-checkbox v-model="scope.row.whetherRequired" :disabled="judgeColumns(scope.row)" />
  40. </template>
  41. </el-table-column>
  42. <el-table-column prop="queryWhether" label="是否是查询" align="center" show-overflow-tooltip>
  43. <template #default="scope">
  44. <el-switch v-model="scope.row.queryWhether" :active-value="true" :inactive-value="false" />
  45. </template>
  46. </el-table-column>
  47. <el-table-column prop="queryType" label="查询方式" show-overflow-tooltip>
  48. <template #default="scope">
  49. <el-select v-model="scope.row.queryType" class="m-2" placeholder="Select" :disabled="!scope.row.queryWhether">
  50. <el-option v-for="item in state.queryTypeList" :key="item.value" :label="item.label" :value="item.value" />
  51. </el-select>
  52. </template>
  53. </el-table-column>
  54. </el-table>
  55. <template #footer>
  56. <span class="dialog-footer">
  57. <el-button @click="cancel" size="default">取 消</el-button>
  58. <el-button type="primary" @click="submit" size="default">确 定</el-button>
  59. </span>
  60. </template>
  61. </el-dialog>
  62. <fkDialog ref="fkDialogRef" />
  63. <treeDialog ref="treeDialogRef" />
  64. </div>
  65. </template>
  66. <script lang="ts" setup name="sysCodeGenConfig">
  67. import { onMounted, onUnmounted, reactive, ref } from 'vue';
  68. import mittBus from '/@/utils/mitt';
  69. import fkDialog from '/@/views/system/codeGen/component/fkDialog.vue';
  70. import treeDialog from '/@/views/system/codeGen/component/treeDialog.vue';
  71. import { getAPI } from '/@/utils/axios-utils';
  72. import { SysCodeGenConfigApi, SysConstApi, SysDictDataApi, SysDictTypeApi } from '/@/api-services/api';
  73. const fkDialogRef = ref();
  74. const treeDialogRef = ref();
  75. const state = reactive({
  76. isShowDialog: false,
  77. loading: false,
  78. tableData: [] as any,
  79. dbData: [] as any,
  80. effectTypeList: [] as any,
  81. dictTypeCodeList: [] as any,
  82. dictDataAll: [] as any,
  83. queryTypeList: [] as any,
  84. allConstSelector: [] as any,
  85. });
  86. onMounted(async () => {
  87. let res = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_effect_type');
  88. state.effectTypeList = res.data.result;
  89. res = await getAPI(SysDictTypeApi).apiSysDictTypeListGet();
  90. state.dictTypeCodeList = res.data.result;
  91. state.dictDataAll = res.data.result;
  92. res = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_query_type');
  93. state.queryTypeList = res.data.result;
  94. res = await getAPI(SysConstApi).apiSysConstListGet();
  95. state.allConstSelector = res.data.result;
  96. mittBus.on('submitRefreshFk', (data: any) => {
  97. state.tableData[data.index] = data;
  98. });
  99. });
  100. onUnmounted(() => {
  101. mittBus.off('submitRefresh', () => {});
  102. mittBus.off('submitRefreshFk', () => {});
  103. });
  104. // 控件类型改变
  105. const effectTypeChange = (data: any, index: number) => {
  106. let value = data.effectType;
  107. if (value === 'fk') {
  108. openFkDialog(data, index);
  109. } else if (value === 'ApiTreeSelect') {
  110. openTreeDialog(data, index);
  111. } else if (value === 'Select') {
  112. data.dictTypeCode = '';
  113. state.dictTypeCodeList = state.dictDataAll;
  114. } else if (value === 'ConstSelector') {
  115. data.dictTypeCode = '';
  116. state.dictTypeCodeList = state.allConstSelector;
  117. }
  118. };
  119. // 查询操作
  120. const handleQuery = async (row: any) => {
  121. state.loading = true;
  122. var res = await getAPI(SysCodeGenConfigApi).apiSysCodeGenConfigListGet(undefined, row.id);
  123. var data = res.data.result ?? [];
  124. data.forEach((item: any) => {
  125. for (const key in item) {
  126. if (item[key] === 'Y') {
  127. item[key] = true;
  128. }
  129. if (item[key] === 'N') {
  130. item[key] = false;
  131. }
  132. }
  133. });
  134. state.tableData = data;
  135. state.loading = false;
  136. };
  137. // 判断是否(用于是否能选择或输入等)
  138. function judgeColumns(data: any) {
  139. var lst = ['createdUserName', 'createdTime', 'updatedUserName', 'updatedTime'];
  140. return lst.indexOf(data.columnName) > -1 || data.columnKey === 'True';
  141. }
  142. function effectTypeEnable(data: any) {
  143. var lst = ['Radio', 'Select', 'Checkbox', 'ConstSelector'];
  144. return lst.indexOf(data.effectType) === -1;
  145. }
  146. // 打开弹窗
  147. const openDialog = (addRow: any) => {
  148. handleQuery(addRow);
  149. state.isShowDialog = true;
  150. };
  151. // 打开弹窗
  152. const openFkDialog = (addRow: any, index: number) => {
  153. addRow.index = index;
  154. fkDialogRef.value.openDialog(addRow);
  155. };
  156. const openTreeDialog = (addRow: any, index: number) => {
  157. addRow.index = index;
  158. treeDialogRef.value.openDialog(addRow);
  159. };
  160. // 关闭弹窗
  161. const closeDialog = () => {
  162. mittBus.emit('submitRefresh');
  163. state.isShowDialog = false;
  164. };
  165. // 取消
  166. const cancel = () => {
  167. state.isShowDialog = false;
  168. };
  169. // 提交
  170. const submit = async () => {
  171. state.loading = true;
  172. var lst = state.tableData;
  173. lst.forEach((item: any) => {
  174. // 必填那一项转换
  175. for (const key in item) {
  176. if (item[key] === true) {
  177. item[key] = 'Y';
  178. }
  179. if (item[key] === false) {
  180. item[key] = 'N';
  181. }
  182. }
  183. });
  184. await getAPI(SysCodeGenConfigApi).apiSysCodeGenConfigUpdatePost(lst);
  185. state.loading = false;
  186. closeDialog();
  187. };
  188. const convertDbType = (dbType: number) => {
  189. let result = '';
  190. switch (dbType) {
  191. case 0:
  192. result = 'MySql';
  193. break;
  194. case 1:
  195. result = 'SqlServer';
  196. break;
  197. case 2:
  198. result = 'Sqlite';
  199. break;
  200. case 3:
  201. result = 'Oracle';
  202. break;
  203. case 4:
  204. result = 'PostgreSql';
  205. break;
  206. case 5:
  207. result = 'Dm';
  208. break;
  209. case 6:
  210. result = 'Kdbndp';
  211. break;
  212. case 7:
  213. result = 'Oscar';
  214. break;
  215. case 8:
  216. result = 'MySqlConnector';
  217. break;
  218. case 9:
  219. result = 'Access';
  220. break;
  221. default:
  222. result = 'Custom';
  223. break;
  224. }
  225. return result;
  226. };
  227. const isOrNotSelect = () => {
  228. return [
  229. {
  230. label: '是',
  231. value: 1,
  232. },
  233. {
  234. label: '否',
  235. value: 0,
  236. },
  237. ];
  238. };
  239. // 导出对象
  240. defineExpose({ openDialog });
  241. </script>