dataSourceDetail.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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. },
  28. code: null,
  29. name: '未命名',
  30. type: null,
  31. connectCode: null,
  32. dbType: null,
  33. dbName: null,
  34. address: null,
  35. port: null,
  36. target: null,
  37. creatorCode: null,
  38. creatorName: null,
  39. createTime: null,
  40. userName: null,
  41. password: null,
  42. description: '',
  43. group: '-1',
  44. notice: '',
  45. columns: [],
  46. },
  47. reducers: {
  48. setField(state, action) {
  49. const { name, value } = action;
  50. let obj = {};
  51. obj[name] = value;
  52. let newState = Object.assign({}, state, obj);
  53. return Object.assign({}, newState, {dirty: true});
  54. },
  55. setFields(state, action) {
  56. const { fields } = action;
  57. let obj = {};
  58. fields.map(f => (obj[f.name] = f.value));
  59. let newState = Object.assign({}, state, obj);
  60. return Object.assign({}, newState, {dirty: true});
  61. },
  62. silentSetField(state, action) {
  63. const { name, value } = action;
  64. let obj = {};
  65. obj[name] = value;
  66. let newState = Object.assign({}, state, obj);
  67. return newState;
  68. },
  69. silentSetFields(state, action) {
  70. const { fields } = action;
  71. let obj = {};
  72. fields.map(f => (obj[f.name] = f.value));
  73. let newState = Object.assign({}, state, obj);
  74. return newState;
  75. },
  76. reset(state, action) {
  77. let newState = Object.assign({}, state, state.originData);
  78. return Object.assign({}, newState);
  79. },
  80. setDirty(state, action) {
  81. const { dirty } = action;
  82. let newState = Object.assign({}, state, { dirty });
  83. return newState;
  84. },
  85. },
  86. effects: {
  87. *importColumns(action, { select, call, put }) {
  88. const dataSourceDetail = yield select(state => state.present.dataSourceDetail);
  89. const sqlStr = dataSourceDetail.target;
  90. const oldColumns = dataSourceDetail.columns;
  91. const { cover } = action;
  92. let body = {
  93. id: dataSourceDetail.connectCode,
  94. strSql: sqlStr
  95. };
  96. try{
  97. const res = yield call(service.fetch, {
  98. url: URLS.DATASOURCE_QUERY_SQLCOLUMNS,
  99. body: body,
  100. timeout: 120000
  101. });
  102. const getColumnType = (dataType) => {
  103. return DEFAULT_COLUMN_TYPE[dataType] || 'categorical';
  104. }
  105. console.log('请求列数据', body, res);
  106. if(!res.err && res.data.code > 0) {
  107. let columns = res.data.data.map((d, i) => {
  108. return {
  109. key: i,
  110. using: true,
  111. name: d.columnName,
  112. alias: d.columnName,
  113. dataType: d.columnType,
  114. columnType: getColumnType(d.columnType),
  115. groupable: d.columnType === 'String',
  116. filterable: true,
  117. }
  118. });
  119. // yield put({ type: 'setField', name: 'columns', value: columns });
  120. if(cover) {
  121. yield put({ type: 'setField', name: 'columns', value: columns });
  122. }else {
  123. let mergeColumns = [];
  124. columns.forEach(c => {
  125. let tc = oldColumns.find(o => o.name === c.name );
  126. if(tc) {
  127. mergeColumns.push(tc);
  128. }else {
  129. mergeColumns.push(c);
  130. }
  131. });
  132. yield put({ type: 'setFields', fields: [
  133. { name: 'columns', value: mergeColumns },
  134. { name: 'notice', value: '' }
  135. ] });
  136. }
  137. }else {
  138. yield put({ type: 'setFields', fields: [
  139. { name: 'columns', value: [] },
  140. { name: 'notice', value: res.err || res.data.msg }
  141. ] });
  142. }
  143. }catch(e) {
  144. console.error(body, e)
  145. yield put({ type: 'setFields', fields: [
  146. { name: 'columns', value: [] },
  147. { name: 'notice', value: e.message + '' || e + '' }
  148. ] });
  149. message.error('请求列数据错误: ' + e);
  150. }
  151. },
  152. },
  153. subscriptions: {
  154. setup({ dispatch, history }) {
  155. return history.listen(({ pathname }) => {
  156. if(pathname.startsWith('/datasource')) {
  157. const temp = pathname.split('/');
  158. if(temp.length === 5) {
  159. const type = temp[2];
  160. const code = temp[3];
  161. const tab = temp[4];
  162. dispatch({ type: 'setFields', fields: [
  163. { name: 'type', value: type },
  164. { name: 'code', value: code },
  165. { name: 'tab', value: tab },
  166. ] });
  167. }
  168. }
  169. })
  170. }
  171. }
  172. };