generateConfigDialog.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <template>
  2. <div class="codeGenerateConfig-container">
  3. <el-dialog v-model="isShowDialog" title="配置" draggable width="100%">
  4. <el-table :data="tableData" style="width: 100%" v-loading="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 effectTypeList" :key="item.value" :label="item.label" :value="item.value" />
  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 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 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">
  67. import { reactive, toRefs, onMounted, onUnmounted, defineComponent, getCurrentInstance, ref } from 'vue';
  68. import fkDialog from '/@/views/system/codeGen/component/fkDialog.vue';
  69. import treeDialog from '/@/views/system/codeGen/component/treeDialog.vue';
  70. import { getAPI } from '/@/utils/axios-utils';
  71. import { SysCodeGenConfigApi,SysConstApi,SysDictDataApi,SysDictTypeApi } from '/@/api-services/api';
  72. export default defineComponent({
  73. name: 'codeGenerateConfig',
  74. components: { fkDialog, treeDialog },
  75. setup() {
  76. const { proxy } = getCurrentInstance() as any;
  77. const fkDialogRef = ref();
  78. const treeDialogRef = ref();
  79. const state = reactive({
  80. isShowDialog: false,
  81. loading: false,
  82. tableData: [] as any,
  83. dbData: [] as any,
  84. effectTypeList: [] as any,
  85. dictTypeCodeList: [] as any,
  86. dictDataAll: [] as any,
  87. queryTypeList: [] as any,
  88. allConstSelector: [] as any,
  89. });
  90. onMounted(async () => {
  91. let res = await getAPI(SysDictDataApi).sysDictDataDictDataDropdownCodeGet('code_gen_effect_type');
  92. state.effectTypeList = res.data.result;
  93. res = await getAPI(SysDictTypeApi).sysDictTypeListGet();
  94. state.dictTypeCodeList = res.data.result;
  95. state.dictDataAll = res.data.result;
  96. res = await getAPI(SysDictDataApi).sysDictDataDictDataDropdownCodeGet('code_gen_query_type');
  97. state.queryTypeList = res.data.result;
  98. res = await getAPI(SysConstApi).sysConstListGet();
  99. state.allConstSelector = res.data.result;
  100. proxy.mittBus.on('submitRefreshFk', (data: any) => {
  101. state.tableData[data.index] = data;
  102. });
  103. });
  104. onUnmounted(() => {
  105. proxy.mittBus.off('submitRefresh');
  106. proxy.mittBus.off('submitRefreshFk');
  107. });
  108. // 控件类型改变
  109. const effectTypeChange = (data: any, index: number) => {
  110. let value = data.effectType;
  111. if (value === 'fk') {
  112. openFkDialog(data, index);
  113. } else if (value === 'ApiTreeSelect') {
  114. openTreeDialog(data, index);
  115. } else if (value === 'Select') {
  116. data.dictTypeCode = '';
  117. state.dictTypeCodeList = state.dictDataAll;
  118. } else if (value === 'ConstSelector') {
  119. data.dictTypeCode = '';
  120. state.dictTypeCodeList = state.allConstSelector;
  121. }
  122. };
  123. // 查询操作
  124. const handleQuery = async (row: any) => {
  125. state.loading = true;
  126. var res = await getAPI(SysCodeGenConfigApi).sysCodeGenerateConfigListGet(undefined,row.id);
  127. var data = res.data.result ?? [];
  128. data.forEach((item: any) => {
  129. for (const key in item) {
  130. if (item[key] === 'Y') {
  131. item[key] = true;
  132. }
  133. if (item[key] === 'N') {
  134. item[key] = false;
  135. }
  136. }
  137. });
  138. state.tableData = data;
  139. state.loading = false;
  140. };
  141. // 判断是否(用于是否能选择或输入等)
  142. function judgeColumns(data: any) {
  143. var lst = ['createdUserName', 'createdTime', 'updatedUserName', 'updatedTime'];
  144. return lst.indexOf(data.columnName) > -1 || data.columnKey === 'True';
  145. }
  146. function effectTypeEnable(data: any) {
  147. var lst = ['Radio', 'Select', 'Checkbox', 'ConstSelector'];
  148. return lst.indexOf(data.effectType) === -1;
  149. }
  150. // 打开弹窗
  151. const openDialog = (addRow: any) => {
  152. handleQuery(addRow);
  153. state.isShowDialog = true;
  154. };
  155. // 打开弹窗
  156. const openFkDialog = (addRow: any, index: number) => {
  157. addRow.index = index;
  158. fkDialogRef.value.openDialog(addRow);
  159. };
  160. const openTreeDialog = (addRow: any, index: number) => {
  161. addRow.index = index;
  162. treeDialogRef.value.openDialog(addRow);
  163. };
  164. // 关闭弹窗
  165. const closeDialog = () => {
  166. proxy.mittBus.emit('submitRefresh');
  167. state.isShowDialog = false;
  168. };
  169. // 取消
  170. const cancel = () => {
  171. state.isShowDialog = false;
  172. };
  173. // 提交
  174. const submit = async () => {
  175. state.loading = true;
  176. var lst = state.tableData;
  177. lst.forEach((item: any) => {
  178. // 必填那一项转换
  179. for (const key in item) {
  180. if (item[key] === true) {
  181. item[key] = 'Y';
  182. }
  183. if (item[key] === false) {
  184. item[key] = 'N';
  185. }
  186. }
  187. });
  188. await getAPI(SysCodeGenConfigApi).sysCodeGenerateConfigEditPost(lst);
  189. state.loading = false;
  190. closeDialog();
  191. };
  192. const convertDbType = (dbType: number) => {
  193. let result = '';
  194. switch (dbType) {
  195. case 0:
  196. result = 'MySql';
  197. break;
  198. case 1:
  199. result = 'SqlServer';
  200. break;
  201. case 2:
  202. result = 'Sqlite';
  203. break;
  204. case 3:
  205. result = 'Oracle';
  206. break;
  207. case 4:
  208. result = 'PostgreSql';
  209. break;
  210. case 5:
  211. result = 'Dm';
  212. break;
  213. case 6:
  214. result = 'Kdbndp';
  215. break;
  216. case 7:
  217. result = 'Oscar';
  218. break;
  219. case 8:
  220. result = 'MySqlConnector';
  221. break;
  222. case 9:
  223. result = 'Access';
  224. break;
  225. default:
  226. result = 'Custom';
  227. break;
  228. }
  229. return result;
  230. };
  231. const isOrNotSelect = () => {
  232. return [
  233. {
  234. label: '是',
  235. value: 1,
  236. },
  237. {
  238. label: '否',
  239. value: 0,
  240. },
  241. ];
  242. };
  243. return {
  244. fkDialogRef,
  245. treeDialogRef,
  246. openDialog,
  247. closeDialog,
  248. cancel,
  249. submit,
  250. ...toRefs(state),
  251. convertDbType,
  252. isOrNotSelect,
  253. handleQuery,
  254. judgeColumns,
  255. effectTypeEnable,
  256. openFkDialog,
  257. openTreeDialog,
  258. effectTypeChange,
  259. };
  260. },
  261. });
  262. </script>