dataSource.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import { routerRedux } from 'dva/router'
  2. import { message } from 'antd'
  3. import * as service from '../services/index'
  4. import URLS from '../constants/url'
  5. export default {
  6. namespace: 'dataSource',
  7. state: {
  8. newOne: {},
  9. list: [],
  10. },
  11. reducers: {
  12. testData(state, action) {
  13. let list = state.list;
  14. for(let i = 0; i < 4; i++) {
  15. let newOne = {
  16. name: 'aldjalsdal',
  17. type: i%2?'file':'database',
  18. dbType: {key: 'oracle', label: 'ORACLE'},
  19. address: '2',
  20. port: '3',
  21. target: 'select * from employee',
  22. creator: 'zhuth',
  23. createTime: new Date(),
  24. userName: '2222',
  25. password: 'aaaww',
  26. tags: ['tttt', 'accc'],
  27. description: ' dddddddddddddddddddddd'
  28. };
  29. newOne.key = new Date().getMilliseconds()+(Math.random()*100).toFixed(0)+i;
  30. newOne.code = new Date().getMilliseconds()+(Math.random()*100).toFixed(0)+i;
  31. list.push(newOne);
  32. }
  33. return Object.assign({}, state, {list});
  34. },
  35. list(state, action) {
  36. let data = action.data;
  37. return Object.assign({}, state, {list: data});
  38. },
  39. add(state, action) {
  40. let newOne = Object.assign({}, state.newOne);
  41. let list = state.list;
  42. newOne.key = new Date().getMilliseconds()+(Math.random()*100).toFixed(0);
  43. newOne.code = new Date().getMilliseconds()+(Math.random()*100).toFixed(0);
  44. newOne.creator = 'zhuth';
  45. newOne.createTime = new Date();
  46. list.push(newOne);
  47. return Object.assign({}, state, {list});
  48. },
  49. modify(state, action) {
  50. const { newOne } = state;
  51. let list = state.list;
  52. for(let i = 0; i < list.length; i++) {
  53. if(list[i].code == newOne.code) {
  54. list[i] = Object.assign({}, newOne);
  55. break;
  56. }
  57. }
  58. return Object.assign({}, state, {list});
  59. },
  60. delete(state, action) {
  61. const { model } = action;
  62. let { list } = state;
  63. for(let i = 0; i < list.length; i++) {
  64. if(list[i].code == model.code) {
  65. list.splice(i, 1);
  66. }
  67. }
  68. return Object.assign({}, state, {list});
  69. },
  70. setNewModelFields(state, action) {
  71. const { fields } = action;
  72. let newOne = state.newOne;
  73. for(let i = 0; i < fields.length; i++) {
  74. newOne[fields[i]['name']] = fields[i]['value'];
  75. }
  76. let obj = Object.assign({}, state, {newOne});
  77. console.log(obj);
  78. return obj;
  79. },
  80. setNewModelField(state, action) {
  81. const { name, value } = action;
  82. let newOne = state.newOne;
  83. newOne[name] = value;
  84. let obj = Object.assign({}, state, {newOne});
  85. console.log(obj);
  86. return obj;
  87. },
  88. setNewModel(state, action) {
  89. const { model } = action;
  90. let newOne = Object.assign({}, model);
  91. return Object.assign({}, state, {newOne});
  92. },
  93. resetNewModel(state, action) {
  94. return Object.assign({}, state, {newOne: {}});
  95. },
  96. printNewOne(state, action) {
  97. console.log(state.newOne);
  98. return state;
  99. }
  100. },
  101. effects: {
  102. *fetchList(action, { select, call, put, takeEvery, takeLatest }) {
  103. try {
  104. const res = yield call(service.fetch, {
  105. url: URLS.DATASOURCE_LIST,
  106. body: {}
  107. });
  108. let data = res.data.data.map((r, i) => {
  109. // r.dbConfig = JSON.parse(r.dbConfig);
  110. return {
  111. key: i,
  112. name: r.dataName,
  113. type: r.type || 'unknown',
  114. dbType: 'oracle',
  115. creator: r.createBy,
  116. createTime: new Date(r.createDate),
  117. tags: ['tttt', 'accc'],
  118. description: r.note
  119. }
  120. });
  121. console.log(data);
  122. yield put({ type: 'list', data });
  123. }catch(e) {
  124. message.error('失败');
  125. console.log(e);
  126. yield put({ type: 'list', data: [] });
  127. }
  128. },
  129. *importNewModelColumns(action, { select, call, put }) {
  130. const dataSource = yield select(state => state.present.dataSource);
  131. const sqlStr = dataSource.newOne.target;
  132. const res = yield call(service.fetch, {
  133. url: URLS.DATASOURCE_QUERY_COLUMNS,
  134. body: {
  135. "String": sqlStr
  136. }
  137. });
  138. console.log(res);
  139. const getDataType = (columnType) => {
  140. let dataType = 'string';
  141. if(columnType == 'VARCHAR2') {
  142. dataType = 'categorical';
  143. }else if(columnType == 'NUMBER') {
  144. dataType = 'scale'
  145. }else if(columnType == 'DATE') {
  146. dataType = 'time'
  147. }else if(columnType == 'NUMBER') {
  148. dataType = 'scale'
  149. }
  150. return dataType;
  151. }
  152. if(!res.err && res.data.code > 0) {
  153. let columns = res.data.data.map((d, i) => {
  154. return {
  155. key: i,
  156. using: true,
  157. name: d.columnName,
  158. alias: d.remarks?d.remarks.substring(0, 10):'',
  159. columnType: d.columnType,
  160. dataType: getDataType(d.columnType),
  161. groupable: d.columnType == 'VARCHAR2',
  162. bucketizable: d.columnType == 'NUMBER',
  163. description: d.remarks
  164. }
  165. });
  166. yield put({ type: 'setNewModelField', name: 'columns', value: columns });
  167. }else {
  168. yield put({ type: 'setNewModelField', name: 'columns', value: [] });
  169. // 弹出错误提示
  170. }
  171. }
  172. },
  173. subscriptions: {
  174. setup({ dispatch, history }) {
  175. return history.listen(({ pathname, query }) => {
  176. if (pathname.startsWith('/datasource')) {
  177. dispatch({ type: 'fetchList' })
  178. }
  179. })
  180. }
  181. }
  182. };