dataConnect.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. import { message } from 'antd'
  2. import * as service from '../services/index'
  3. import URLS from '../constants/url'
  4. export default {
  5. namespace: 'dataConnect',
  6. state: {
  7. originData: {
  8. list: [],
  9. newOne: {},
  10. filterLabel: '',
  11. validInfo: {}
  12. }
  13. },
  14. reducers: {
  15. list(state, action) {
  16. const data = action.data;
  17. return Object.assign({}, state, {list: data});
  18. },
  19. add(state, action) {
  20. let newOne = Object.assign({}, state.newOne);
  21. let list = state.list;
  22. newOne.key = new Date().getMilliseconds()+(Math.random()*100).toFixed(0);
  23. newOne.code = new Date().getMilliseconds()+(Math.random()*100).toFixed(0);
  24. list.push(newOne);
  25. return Object.assign({}, state, {list});
  26. },
  27. modify(state, action) {
  28. const { newOne } = state;
  29. let list = state.list;
  30. for(let i = 0; i < list.length; i++) {
  31. if(list[i].code === newOne.code) {
  32. list[i] = Object.assign({}, newOne);
  33. break;
  34. }
  35. }
  36. return Object.assign({}, state, {list});
  37. },
  38. delete(state, action) {
  39. const { model } = action;
  40. let { list } = state;
  41. for(let i = 0; i < list.length; i++) {
  42. if(list[i].code === model.code) {
  43. list.splice(i, 1);
  44. }
  45. }
  46. return Object.assign({}, state, {list});
  47. },
  48. setSelected(state, action) {
  49. const { selected } = action;
  50. return Object.assign({}, state, {selected});
  51. },
  52. resetSelected(state, action) {
  53. return Object.assign({}, state, {selected: null});
  54. },
  55. setFilterLabel(state, action) {
  56. const { label } = action;
  57. return Object.assign({}, state, { filterLabel: label });
  58. },
  59. setNewModelField(state, action) {
  60. const { name, value } = action;
  61. let newOne = state.newOne;
  62. let validInfo = state.validInfo;
  63. newOne[name] = value;
  64. delete newOne.invalid;
  65. return Object.assign({}, state, { newOne, validInfo });
  66. },
  67. setNewModelFields(state, action) {
  68. const { fields } = action;
  69. let newOne = state.newOne;
  70. for(let i = 0; i < fields.length; i++) {
  71. newOne[fields[i]['name']] = fields[i]['value'];
  72. }
  73. delete newOne.invalid;
  74. return Object.assign({}, state, {newOne});
  75. },
  76. setNewModel(state, action) {
  77. const { model } = action;
  78. let newOne = Object.assign({}, model);
  79. return Object.assign({}, state, {newOne});
  80. },
  81. resetNewModel(state, action) {
  82. let newOne = state.newOne;
  83. delete newOne.name;
  84. delete newOne.dbType;
  85. delete newOne.address;
  86. delete newOne.port;
  87. delete newOne.dbName;
  88. delete newOne.userName;
  89. delete newOne.password;
  90. delete newOne.description;
  91. delete newOne.demo;
  92. return Object.assign({}, state, {newOne});
  93. },
  94. setNewModelInvalid(state, action) {
  95. const { value } = action;
  96. let newOne = state.newOne;
  97. newOne.invalid = value;
  98. return Object.assign({}, state, {newOne});
  99. },
  100. reset(state, action) {
  101. let newState = Object.assign({}, state, state.originData);
  102. return Object.assign({}, newState);
  103. },
  104. },
  105. effects: {
  106. *fetchList(action, { select, call, put, takeEvery, takeLatest }) {
  107. const { pageNum, pageSize } = action;
  108. const body = {
  109. pageNum: pageNum || 1,
  110. pageSize: pageSize || 999
  111. }
  112. try {
  113. const dataConnect = yield select(state => state.present.dataConnect);
  114. if(!action.mandatory && dataConnect.list.length > 0) {
  115. return;
  116. }
  117. const res = yield call(service.fetch, {
  118. url: URLS.DATACONNECT_LIST,
  119. method: 'GET',
  120. body
  121. });
  122. console.log('请求数据连接配置列表', body, res);
  123. if(!res.err && res.data.code > 0) {
  124. let data = res.data.data.list.map((r, i) => {
  125. return {
  126. key: i,
  127. code: r.id,
  128. name: r.name,
  129. dbName: r.dataName,
  130. dbType: r.databaseType,
  131. address: r.addrass,
  132. port: r.port,
  133. userName: r.userName,
  134. password: r.passWord,
  135. description: r.note,
  136. demo: r.demo
  137. }
  138. });
  139. yield put({ type: 'list', data });
  140. }else {
  141. message.error('读取数据连接配置列表错误: ' + (res.err || res.data.msg));
  142. }
  143. }catch(e) {
  144. message.error('读取数据连接配置列表错误: ' + e);
  145. console.error(body, e);
  146. }
  147. },
  148. *remoteValidate(action, { select, call, put, takeEvery, takeLatest }) {
  149. const dataConnect = yield select(state => state.present.dataConnect);
  150. const model = dataConnect.newOne;
  151. try {
  152. // 设置validating为true
  153. yield put({ type: 'setNewModelField', name: 'validating', value: true });
  154. // 调用检测接口检测连接配置是否合法
  155. let validBody = {
  156. id: model.code,
  157. name: model.name,
  158. addrass: model.address,
  159. port: model.port,
  160. databaseType: model.dbType,
  161. dataName: model.dbName,
  162. userName: model.userName,
  163. passWord: model.password
  164. }
  165. const res = yield call(service.fetch, {
  166. url: URLS.DATACONNECT_VALIDATE,
  167. body: validBody
  168. });
  169. // 设置validating为false
  170. yield put({ type: 'setNewModelField', name: 'validating', value: false });
  171. if(!res.err && res.data.code > 0) {
  172. // 如果合法
  173. // 设置valid为true
  174. yield put({ type: 'setNewModelInvalid', name: 'invalid', value: false });
  175. message.success('测试通过');
  176. }else {
  177. message.error('校验失败: ' + (res.err || res.data.msg));
  178. yield put({ type: 'setNewModelInvalid', name: 'invalid', value: true });
  179. }
  180. }catch(e) {
  181. message.error('校验失败: ' + e);
  182. yield put({ type: 'setNewModelField', name: 'validating', value: false });
  183. }
  184. },
  185. *remoteAdd(action, { select, call, put, takeEvery, takeLatest }) {
  186. try {
  187. const dataConnect = yield select(state => state.present.dataConnect);
  188. const model = dataConnect.newOne;
  189. // 设置validating为true
  190. yield put({ type: 'setNewModelField', name: 'saving', value: true });
  191. // 调用检测接口检测连接配置是否合法
  192. let validBody = {
  193. id: model.code,
  194. name: model.name,
  195. addrass: model.address,
  196. port: model.port,
  197. databaseType: model.dbType,
  198. dataName: model.dbName,
  199. userName: model.userName,
  200. passWord: model.password
  201. }
  202. const validRes = yield call(service.fetch, {
  203. url: URLS.DATACONNECT_VALIDATE,
  204. body: validBody
  205. });
  206. let flag = !validRes.err && validRes.data.code > 0;
  207. if(flag) {
  208. // 如果合法
  209. // 设置valid为true
  210. yield put({ type: 'setNewModelInvalid', name: 'invalid', value: false });
  211. // 继续执行保存
  212. let body = {
  213. name: model.name,
  214. addrass: model.address,
  215. port: model.port,
  216. databaseType: model.dbType,
  217. dataName: model.dbName,
  218. userName: model.userName,
  219. passWord: model.password,
  220. note: model.description
  221. }
  222. const res = yield call(service.fetch, {
  223. url: URLS.DATACONNECT_ADD,
  224. body: body
  225. });
  226. yield put({ type: 'setNewModelField', name: 'saving', value: false });
  227. if(!res.err && res.data.code > 0) {
  228. yield put({ type: 'fetchList', mandatory: true });
  229. message.success('新增成功');
  230. return true;
  231. }else {
  232. message.error('新增失败: ' + (res.err || res.data.msg));
  233. return false;
  234. }
  235. }else {
  236. message.error('新增失败: ' + validRes.data.msg);
  237. yield put({ type: 'setNewModelInvalid', name: 'invalid', value: true });
  238. yield put({ type: 'setNewModelField', name: 'saving', value: false });
  239. return false;
  240. }
  241. }catch(e) {
  242. message.error('新增失败: ' + e);
  243. yield put({ type: 'setNewModelField', name: 'saving', value: false });
  244. return false;
  245. }
  246. },
  247. *remoteModify(action, { select, call, put }) {
  248. try{
  249. const dataConnect = yield select(state => state.present.dataConnect);
  250. const model = dataConnect.newOne;
  251. // 设置validating为true
  252. yield put({ type: 'setNewModelField', name: 'saving', value: true });
  253. // 调用检测接口检测连接配置是否合法
  254. let validBody = {
  255. id: model.code,
  256. name: model.name,
  257. addrass: model.address,
  258. port: model.port,
  259. databaseType: model.dbType,
  260. dataName: model.dbName,
  261. userName: model.userName,
  262. passWord: model.password
  263. }
  264. const validRes = yield call(service.fetch, {
  265. url: URLS.DATACONNECT_VALIDATE,
  266. body: validBody
  267. });
  268. let flag = !validRes.err && validRes.data.code > 0;
  269. if(flag) {
  270. // 如果合法
  271. // 设置valid为true
  272. yield put({ type: 'setNewModelInvalid', name: 'invalid', value: false });
  273. // 继续执行保存
  274. const code = action.code;
  275. let data = {
  276. id: code,
  277. name: model.name,
  278. addrass: model.address,
  279. port: model.port,
  280. databaseType: model.dbType,
  281. dataName: model.dbName,
  282. userName: model.userName,
  283. passWord: model.password,
  284. note: model.description
  285. };
  286. const res = yield call(service.fetch, {
  287. url: URLS.DATACONNECT_UPDATE,
  288. body: data
  289. });
  290. yield put({ type: 'setNewModelField', name: 'saving', value: false });
  291. if(!res.err && res.data.code > 0) {
  292. yield put({ type: 'fetchList', mandatory: true });
  293. message.success('修改成功');
  294. return true;
  295. }else {
  296. message.error('修改失败: ' + (res.err || res.data.msg));
  297. return false;
  298. }
  299. }else {
  300. message.error('修改失败: ' + validRes.data.msg);
  301. yield put({ type: 'setNewModelInvalid', name: 'invalid', value: true });
  302. yield put({ type: 'setNewModelField', name: 'saving', value: false });
  303. return false;
  304. }
  305. }catch(e) {
  306. message.error('修改失败: ' + e);
  307. yield put({ type: 'setNewModelField', name: 'saving', value: false });
  308. return false;
  309. }
  310. },
  311. *remoteDelete(action, { select, call, put, takeEvery, takeLatest }) {
  312. const dataConnect = yield select(state => state.present.dataConnect);
  313. const code = action.code;
  314. let list = dataConnect.list;
  315. try {
  316. const res = yield call(service.fetch, {
  317. url: URLS.DATACONNECT_DELETE,
  318. body: [code]
  319. });
  320. console.log(code, res);
  321. if(!res.err && res.data.code > 0) {
  322. for(let i = 0; i < list.length; i++) {
  323. if((list[i].code+'') === (code+'')) {
  324. list.splice(i, 1);
  325. break;
  326. }
  327. }
  328. yield put({ type: 'list', data: list });
  329. message.success('删除成功');
  330. }else {
  331. message.error('删除失败: ' + (res.err || res.data.msg));
  332. }
  333. }catch(e) {
  334. console.log(e);
  335. message.error('删除失败: ' + e);
  336. }
  337. }
  338. },
  339. subscriptions: {
  340. setup({ dispatch, history }) {
  341. dispatch({ type: 'reset' });
  342. }
  343. }
  344. };