import { routerRedux } from 'dva/router' import { message } from 'antd' import * as service from '../services/index' import URLS from '../constants/url' export default { namespace: 'dataSource', state: { newOne: {}, list: [], }, reducers: { testData(state, action) { let list = state.list; for(let i = 0; i < 4; i++) { let newOne = { name: 'aldjalsdal', type: i%2?'file':'database', dbType: {key: 'oracle', label: 'ORACLE'}, address: '2', port: '3', target: 'select * from employee', creator: 'zhuth', createTime: new Date(), userName: '2222', password: 'aaaww', tags: ['tttt', 'accc'], description: ' dddddddddddddddddddddd' }; newOne.key = new Date().getMilliseconds()+(Math.random()*100).toFixed(0)+i; newOne.code = new Date().getMilliseconds()+(Math.random()*100).toFixed(0)+i; list.push(newOne); } return Object.assign({}, state, {list}); }, list(state, action) { let data = action.data; return Object.assign({}, state, {list: data}); }, add(state, action) { let newOne = Object.assign({}, state.newOne); let list = state.list; newOne.key = new Date().getMilliseconds()+(Math.random()*100).toFixed(0); newOne.code = new Date().getMilliseconds()+(Math.random()*100).toFixed(0); newOne.creator = 'zhuth'; newOne.createTime = new Date(); list.push(newOne); return Object.assign({}, state, {list}); }, modify(state, action) { const { newOne } = state; let list = state.list; for(let i = 0; i < list.length; i++) { if(list[i].code == newOne.code) { list[i] = Object.assign({}, newOne); break; } } return Object.assign({}, state, {list}); }, delete(state, action) { const { model } = action; let { list } = state; for(let i = 0; i < list.length; i++) { if(list[i].code == model.code) { list.splice(i, 1); } } return Object.assign({}, state, {list}); }, setNewModelFields(state, action) { const { fields } = action; let newOne = state.newOne; for(let i = 0; i < fields.length; i++) { newOne[fields[i]['name']] = fields[i]['value']; } let obj = Object.assign({}, state, {newOne}); console.log(obj); return obj; }, setNewModelField(state, action) { const { name, value } = action; let newOne = state.newOne; newOne[name] = value; let obj = Object.assign({}, state, {newOne}); console.log(obj); return obj; }, setNewModel(state, action) { const { model } = action; let newOne = Object.assign({}, model); return Object.assign({}, state, {newOne}); }, resetNewModel(state, action) { return Object.assign({}, state, {newOne: {}}); }, printNewOne(state, action) { console.log(state.newOne); return state; } }, effects: { *fetchList(action, { select, call, put, takeEvery, takeLatest }) { try { const res = yield call(service.fetch, { url: URLS.DATASOURCE_LIST, body: {} }); let data = res.data.data.map((r, i) => { // r.dbConfig = JSON.parse(r.dbConfig); return { key: i, name: r.dataName, type: r.type || 'unknown', dbType: 'oracle', creator: r.createBy, createTime: new Date(r.createDate), tags: ['tttt', 'accc'], description: r.note } }); console.log(data); yield put({ type: 'list', data }); }catch(e) { message.error('失败'); console.log(e); yield put({ type: 'list', data: [] }); } }, *importNewModelColumns(action, { select, call, put }) { const dataSource = yield select(state => state.present.dataSource); const sqlStr = dataSource.newOne.target; const res = yield call(service.fetch, { url: URLS.DATASOURCE_QUERY_COLUMNS, body: { "String": sqlStr } }); console.log(res); const getDataType = (columnType) => { let dataType = 'string'; if(columnType == 'VARCHAR2') { dataType = 'categorical'; }else if(columnType == 'NUMBER') { dataType = 'scale' }else if(columnType == 'DATE') { dataType = 'time' }else if(columnType == 'NUMBER') { dataType = 'scale' } return dataType; } if(!res.err && res.data.code > 0) { let columns = res.data.data.map((d, i) => { return { key: i, using: true, name: d.columnName, alias: d.remarks?d.remarks.substring(0, 10):'', columnType: d.columnType, dataType: getDataType(d.columnType), groupable: d.columnType == 'VARCHAR2', bucketizable: d.columnType == 'NUMBER', description: d.remarks } }); yield put({ type: 'setNewModelField', name: 'columns', value: columns }); }else { yield put({ type: 'setNewModelField', name: 'columns', value: [] }); // 弹出错误提示 } } }, subscriptions: { setup({ dispatch, history }) { return history.listen(({ pathname, query }) => { if (pathname.startsWith('/datasource')) { dispatch({ type: 'fetchList' }) } }) } } };