From 79e1455e4ba4f4a7d04a483dda1a354e53921a69 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 04 十一月 2020 19:04:14 +0800 Subject: [PATCH] 2020-11-04 --- src/tabviews/custom/components/share/tabtransfer/index.jsx | 187 ++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 176 insertions(+), 11 deletions(-) diff --git a/src/tabviews/custom/components/share/tabtransfer/index.jsx b/src/tabviews/custom/components/share/tabtransfer/index.jsx index 0238c31..f2bb801 100644 --- a/src/tabviews/custom/components/share/tabtransfer/index.jsx +++ b/src/tabviews/custom/components/share/tabtransfer/index.jsx @@ -2,17 +2,22 @@ import PropTypes from 'prop-types' import { connect } from 'react-redux' import { is, fromJS } from 'immutable' -import { Row, Col, Empty } from 'antd' +import { Row, Col, Empty, notification } from 'antd' +import moment from 'moment' -import asyncSpinComponent from '@/utils/asyncSpinComponent' +import Api from '@/api' +import options from '@/store/options.js' +import asyncComponent from '@/utils/asyncComponent' import Utils from '@/utils/utils.js' import './index.scss' // 閫氱敤缁勪欢 -const AntvBarAndLine = asyncSpinComponent(() => import('@/tabviews/custom/components/chart/antv-bar-line')) -const MainSearch = asyncSpinComponent(() => import('@/tabviews/custom/components/search/main-search')) -const AntvPie = asyncSpinComponent(() => import('@/tabviews/custom/components/chart/antv-pie')) -const AntvTabs = asyncSpinComponent(() => import('@/tabviews/custom/components/tabs/antv-tabs')) +const AntvBarAndLine = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-bar-line')) +const MainSearch = asyncComponent(() => import('@/tabviews/custom/components/search/main-search')) +const AntvPie = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-pie')) +const AntvTabs = asyncComponent(() => import('@/tabviews/custom/components/tabs/antv-tabs')) +const DataCard = asyncComponent(() => import('@/tabviews/custom/components/card/data-card')) +const PropCard = asyncComponent(() => import('@/tabviews/custom/components/card/prop-card')) class TabTransfer extends Component { static propTpyes = { @@ -25,11 +30,13 @@ state = { mainSearch: [], - self: false + self: false, + data: null } UNSAFE_componentWillMount () { const { config, mainSearch } = this.props + // 鑾峰彇涓绘悳绱㈡潯浠� let _mainSearch = [] let self = false @@ -56,7 +63,26 @@ } }) - this.setState({mainSearch: self ? _mainSearch : fromJS(mainSearch).toJS(), self}) + if (!self) { + _mainSearch = fromJS(mainSearch).toJS() + } + + let params = [] + config.components.forEach(component => { + if (component.type === 'tabs') return + + if (!component.format || (component.subtype === 'propcard' && component.wrap.datatype === 'static')) return + + if (component.dataName && !component.pageable && component.setting.interType === 'system' && component.setting.onload === 'true' && component.setting.sync === 'true') { + let param = this.getDefaultParam(component, _mainSearch) + params.push(param) + } else { + component.setting.sync = 'false' + } + }) + + this.setState({mainSearch: _mainSearch, self}) + this.loadmaindata(params) } UNSAFE_componentWillReceiveProps(nextProps) { @@ -67,13 +93,136 @@ } } + /** + * @description 鑾峰彇绯荤粺瀛樺偍杩囩▼ sPC_Get_TableData 鐨勫弬鏁� + */ + getDefaultParam = (component, mainSearch) => { + const { columns, search, setting, dataName, format } = component + + let searchlist = [] + if (search && search.length > 0) { + searchlist = Utils.initMainSearch(search) + } + if (setting.useMSearch === 'true') { + searchlist = [...mainSearch, ...searchlist] + } + + let arr_field = columns.map(col => col.field) + let _dataresource = setting.dataresource + let _customScript = setting.customScript + + if (setting.queryType === 'statistics' || _customScript) { + let allSearch = Utils.getAllSearchOptions(searchlist) + let regoptions = allSearch.map(item => { + return { + reg: new RegExp('@' + item.key + '@', 'ig'), + value: `'${item.value}'` + } + }) + + regoptions.forEach(item => { + if (_dataresource && setting.queryType === 'statistics') { + _dataresource = _dataresource.replace(item.reg, item.value) + } + if (_customScript) { + _customScript = _customScript.replace(item.reg, item.value) + } + }) + } + + let _search = '' + if (setting.queryType !== 'statistics' && _dataresource) { + _search = Utils.joinMainSearchkey(searchlist) + _search = _search ? 'where ' + _search : '' + } + + if (setting.order && _dataresource) { + _dataresource = `select top 1000 ${arr_field.join(',')} from (select ${arr_field.join(',')} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows ` + } else if (_dataresource) { + _dataresource = `select top 1000 ${arr_field.join(',')} from ${_dataresource} ${_search} ` + } + + // 娴嬭瘯绯荤粺鎵撳嵃鏌ヨ璇彞 + if ((options.sysType === 'local' && !window.GLOB.systemType) || window.debugger === true) { + _customScript && console.log(`${_dataresource ? '' : '/*涓嶆墽琛岄粯璁ql*/\n'}${_customScript}`) + _dataresource && console.log(_dataresource) + } + + return { + name: dataName, + columns: columns, + par_tablename: '', + type: format === 'array' ? format : '', + primaryKey: setting.primaryKey || '', + foreign_key: '', + sql: _dataresource, + script: _customScript + } + } + + /** + * @description 涓昏〃鏁版嵁鍔犺浇 + */ + loadmaindata = (params) => { + if (!params || params.length === 0) return + let LText_field = [] + let LText = params.map((item, index) => { + let _sql = item.sql + let _script = item.script + + if (index === 0) { + _script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode='',@retmsg ='' + ${_script} + ` + } + + item.columns.forEach(cell => { + LText_field.push(`Select '${item.name}' as tablename,'${cell.field}' as fieldname,'${cell.datatype}' as field_type`) + }) + return `Select '${item.name}' as tablename,'${window.btoa(window.encodeURIComponent(_sql))}' as LText,'${window.btoa(window.encodeURIComponent(_script))}' as Lcustomize,'${item.type}' as table_type,'${item.primaryKey}' as primary_key,'${item.par_tablename}' as par_tablename,'${item.foreign_key}' as foreign_key,'${index}' as Sort` + }) + + let param = { + func: 'sPC_Get_structured_data', + LText: LText.join(' union all '), + LText_field: LText_field.join(' union all ') + } + + param.LText = Utils.formatOptions(param.LText) + param.LText_field = Utils.formatOptions(param.LText_field) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + + Api.getLocalConfig(param).then(result => { + if (result.status) { + delete result.status + delete result.message + delete result.ErrMesg + delete result.ErrCode + + this.setState({ + data: result + }) + } else { + this.setState({ + data: '' + }) + notification.error({ + top: 92, + message: result.message, + duration: 10 + }) + } + }) + } + resetSearch = (search) => { this.setState({mainSearch: search}) } getComponents = () => { const { menuType, dataManager, BID, config } = this.props - const { mainSearch } = this.state + const { mainSearch, data } = this.state if (!config || !config.components || config.components.length === 0) return (<Empty description={false} />) @@ -81,13 +230,13 @@ if (item.type === 'bar' || item.type === 'line') { return ( <Col span={item.width} key={item.uuid}> - <AntvBarAndLine config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> + <AntvBarAndLine data={data} config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> </Col> ) } else if (item.type === 'pie') { return ( <Col span={item.width} key={item.uuid}> - <AntvPie config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> + <AntvPie data={data} config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> </Col> ) } else if (item.type === 'search') { @@ -102,6 +251,22 @@ <AntvTabs config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> </Col> ) + } else if (item.type === 'card') { + if (item.subtype === 'datacard') { + return ( + <Col span={item.width} key={item.uuid}> + <DataCard config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> + </Col> + ) + } else if (item.subtype === 'propcard') { + return ( + <Col span={item.width} key={item.uuid}> + <PropCard config={item} data={data} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> + </Col> + ) + } else { + return null + } } else { return null } -- Gitblit v1.8.0