dataSourceDetail.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import { message } from 'antd'
  2. import * as service from '../services/index'
  3. import URLS from '../constants/url'
  4. import DEFAULT_COLUMN_TYPE from './defaultColumnType.json'
  5. export default {
  6. namespace: 'dataSourceDetail',
  7. state: {
  8. originData: {
  9. code: null,
  10. name: '未命名',
  11. type: null,
  12. connectCode: null,
  13. dbType: null,
  14. dbName: null,
  15. address: null,
  16. port: null,
  17. target: null,
  18. creatorCode: null,
  19. creatorName: null,
  20. createTime: null,
  21. userName: null,
  22. password: null,
  23. description: '',
  24. group: '-1',
  25. notice: '',
  26. columns: [],
  27. demo: false
  28. },
  29. },
  30. reducers: {
  31. setField(state, action) {
  32. const { name, value } = action;
  33. let obj = {};
  34. obj[name] = value;
  35. let newState = Object.assign({}, state, obj);
  36. return Object.assign({}, newState, {dirty: true});
  37. },
  38. setFields(state, action) {
  39. const { fields } = action;
  40. let obj = {};
  41. fields.map(f => (obj[f.name] = f.value));
  42. let newState = Object.assign({}, state, obj);
  43. return Object.assign({}, newState, {dirty: true});
  44. },
  45. silentSetField(state, action) {
  46. const { name, value } = action;
  47. let obj = {};
  48. obj[name] = value;
  49. let newState = Object.assign({}, state, obj);
  50. return newState;
  51. },
  52. silentSetFields(state, action) {
  53. const { fields } = action;
  54. let obj = {};
  55. fields.map(f => (obj[f.name] = f.value));
  56. let newState = Object.assign({}, state, obj);
  57. return newState;
  58. },
  59. reset(state, action) {
  60. let newState = Object.assign({}, state, state.originData);
  61. return Object.assign({}, newState);
  62. },
  63. setDirty(state, action) {
  64. const { dirty } = action;
  65. let newState = Object.assign({}, state, { dirty });
  66. return newState;
  67. },
  68. },
  69. effects: {
  70. *importColumns(action, { select, call, put }) {
  71. const dataSourceDetail = yield select(state => state.present.dataSourceDetail);
  72. const sqlStr = dataSourceDetail.target;
  73. const oldColumns = dataSourceDetail.columns;
  74. const { cover } = action;
  75. let body = {
  76. id: dataSourceDetail.connectCode,
  77. strSql: sqlStr
  78. };
  79. try{
  80. const res = yield call(service.fetch, {
  81. url: URLS.DATASOURCE_QUERY_SQLCOLUMNS,
  82. body: body,
  83. timeout: 120000
  84. });
  85. const getColumnType = (dataType) => {
  86. return DEFAULT_COLUMN_TYPE[dataType] || 'categorical';
  87. }
  88. console.log('请求列数据', body, res);
  89. if(!res.err && res.data.code > 0) {
  90. let columns = res.data.data.map((d, i) => {
  91. return {
  92. key: i,
  93. using: true,
  94. name: d.columnName,
  95. alias: d.columnName,
  96. dataType: d.columnType,
  97. columnType: getColumnType(d.columnType),
  98. groupable: d.columnType === 'String',
  99. filterable: true,
  100. }
  101. });
  102. // yield put({ type: 'setField', name: 'columns', value: columns });
  103. if(cover) {
  104. yield put({ type: 'setField', name: 'columns', value: columns });
  105. }else {
  106. let mergeColumns = [];
  107. columns.forEach(c => {
  108. let tc = oldColumns.find(o => o.name === c.name );
  109. if(tc) {
  110. mergeColumns.push(tc);
  111. }else {
  112. mergeColumns.push(c);
  113. }
  114. });
  115. yield put({ type: 'setFields', fields: [
  116. { name: 'columns', value: mergeColumns },
  117. { name: 'notice', value: '' }
  118. ] });
  119. }
  120. }else {
  121. yield put({ type: 'setFields', fields: [
  122. { name: 'columns', value: [] },
  123. { name: 'notice', value: res.err || res.data.msg }
  124. ] });
  125. }
  126. }catch(e) {
  127. console.error(body, e)
  128. yield put({ type: 'setFields', fields: [
  129. { name: 'columns', value: [] },
  130. { name: 'notice', value: e.message + '' || e + '' }
  131. ] });
  132. message.error('请求列数据错误: ' + e.message);
  133. }
  134. },
  135. },
  136. subscriptions: {
  137. setup({ dispatch, history }) {
  138. dispatch({ type: 'reset' });
  139. }
  140. }
  141. };