dataSourceDetail.js 6.2 KB

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