| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- import { message } from 'antd'
- import * as service from '../services/index'
- import URLS from '../constants/url'
- import DEFAULT_COLUMN_TYPE from './defaultColumnType.json'
- export default {
- namespace: 'dataSourceDetail',
- state: {
- originData: {
- code: null,
- name: '未命名',
- type: null,
- connectCode: null,
- dbType: null,
- dbName: null,
- address: null,
- port: null,
- target: null,
- creatorCode: null,
- creatorName: null,
- createTime: null,
- userName: null,
- password: null,
- description: '',
- group: '-1',
- notice: '',
- columns: [],
- },
- code: null,
- name: '未命名',
- type: null,
- connectCode: null,
- dbType: null,
- dbName: null,
- address: null,
- port: null,
- target: null,
- creatorCode: null,
- creatorName: null,
- createTime: null,
- userName: null,
- password: null,
- description: '',
- group: '-1',
- notice: '',
- columns: [],
- },
- reducers: {
- setField(state, action) {
- const { name, value } = action;
- let obj = {};
- obj[name] = value;
- let newState = Object.assign({}, state, obj);
- return Object.assign({}, newState, {dirty: true});
- },
- setFields(state, action) {
- const { fields } = action;
- let obj = {};
- fields.map(f => (obj[f.name] = f.value));
- let newState = Object.assign({}, state, obj);
- return Object.assign({}, newState, {dirty: true});
- },
- silentSetField(state, action) {
- const { name, value } = action;
- let obj = {};
- obj[name] = value;
- let newState = Object.assign({}, state, obj);
- return newState;
- },
- silentSetFields(state, action) {
- const { fields } = action;
- let obj = {};
- fields.map(f => (obj[f.name] = f.value));
- let newState = Object.assign({}, state, obj);
- return newState;
- },
- reset(state, action) {
- let newState = Object.assign({}, state, state.originData);
- return Object.assign({}, newState);
- },
- setDirty(state, action) {
- const { dirty } = action;
- let newState = Object.assign({}, state, { dirty });
- return newState;
- },
- },
- effects: {
- *importColumns(action, { select, call, put }) {
- const dataSourceDetail = yield select(state => state.present.dataSourceDetail);
- const sqlStr = dataSourceDetail.target;
- const oldColumns = dataSourceDetail.columns;
- const { cover } = action;
- let body = {
- id: dataSourceDetail.connectCode,
- strSql: sqlStr
- };
- try{
- const res = yield call(service.fetch, {
- url: URLS.DATASOURCE_QUERY_SQLCOLUMNS,
- body: body,
- timeout: 120000
- });
-
- const getColumnType = (dataType) => {
- return DEFAULT_COLUMN_TYPE[dataType] || 'categorical';
- }
-
- console.log('请求列数据', body, res);
- 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.columnName,
- dataType: d.columnType,
- columnType: getColumnType(d.columnType),
- groupable: d.columnType === 'String',
- filterable: true,
- }
- });
- // yield put({ type: 'setField', name: 'columns', value: columns });
- if(cover) {
- yield put({ type: 'setField', name: 'columns', value: columns });
- }else {
- let mergeColumns = [];
- columns.forEach(c => {
- let tc = oldColumns.find(o => o.name === c.name );
- if(tc) {
- mergeColumns.push(tc);
- }else {
- mergeColumns.push(c);
- }
- });
- yield put({ type: 'setFields', fields: [
- { name: 'columns', value: mergeColumns },
- { name: 'notice', value: '' }
- ] });
- }
- }else {
- yield put({ type: 'setFields', fields: [
- { name: 'columns', value: [] },
- { name: 'notice', value: res.err || res.data.msg }
- ] });
- }
- }catch(e) {
- console.error(body, e)
- yield put({ type: 'setFields', fields: [
- { name: 'columns', value: [] },
- { name: 'notice', value: e.message + '' || e + '' }
- ] });
- message.error('请求列数据错误: ' + e);
- }
- },
- },
- subscriptions: {
- setup({ dispatch, history }) {
- return history.listen(({ pathname }) => {
- if(pathname.startsWith('/datasource')) {
- const temp = pathname.split('/');
- if(temp.length === 5) {
- const type = temp[2];
- const code = temp[3];
- const tab = temp[4];
- dispatch({ type: 'setFields', fields: [
- { name: 'type', value: type },
- { name: 'code', value: code },
- { name: 'tab', value: tab },
- ] });
- }
- }
- })
- }
- }
- };
|