| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- 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: {
- dirty: false,
- code: null,
- name: '未命名',
- type: null,
- connectCode: null,
- connectName: null,
- dbType: null,
- dbName: null,
- address: null,
- port: null,
- target: null,
- targetDirty: false,
- fetched: false,
- creatorCode: null,
- creatorName: null,
- createTime: null,
- userName: null,
- password: null,
- description: '',
- group: '-1',
- notice: '',
- columns: [],
- demo: false
- },
- },
- 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.dataSourceDetail);
- const sqlStr = dataSourceDetail.target;
- const oldColumns = JSON.parse(JSON.stringify(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: 30000
- });
-
- const getColumnType = (dataType) => {
- return DEFAULT_COLUMN_TYPE[dataType] || 'string';
- }
- // 点击查询后清除数据对象dirty状态
- yield put({ type: 'setField', name: 'targetDirty', value: false });
-
- if(res.code > 0) {
- let colNames = [];
- let repeatColumnName = false;
- let columns = res.data.map((d, i) => {
- if(colNames.findIndex(cn => cn === d.columnName) > -1) {
- repeatColumnName = d.columnName;
- }
- colNames.push(d.columnName);
- return {
- key: d.columnName,
- using: true,
- name: d.columnName,
- alias: d.columnName,
- dataType: d.columnType,
- columnType: getColumnType(d.columnType),
- groupable: d.columnType === 'String',
- filterable: true,
- }
- });
- if(repeatColumnName) {
- message.error('加载列数据失败: 存在重复列[ ' + repeatColumnName + ' ]');
- return false;
- }
- 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) {
- let o = {};
- o.columnType = tc.dataType === c.dataType ? tc.columnType : getColumnType(c.dataType);
- mergeColumns.push({ ...c, ...o, alias: tc.alias, using: tc.using, groupable: tc.groupable, filterable: tc.filterable });
- }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.msg }
- ] });
- }
- }catch(e) {
- console.error(body, e)
- yield put({ type: 'setFields', fields: [
- { name: 'columns', value: [] },
- { name: 'notice', value: e.message + '' || e + '' }
- ] });
- message.error('加载列数据失败: ' + e.message);
- }finally {
- yield put({ type: 'setFields', fields: [
- { name: 'fetched', value: true }
- ] });
- }
- },
- },
- subscriptions: {
- setup({ dispatch, history }) {
- dispatch({ type: 'reset' });
- }
- }
- };
|