From a1e9b18a4dbfd21e1bf4d5cb60974ac2f0115efd Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 30 五月 2025 15:18:44 +0800 Subject: [PATCH] 2025-05-30 --- src/tabviews/custom/components/group/normal-group/index.jsx | 375 +++++++---------------------------------------------- 1 files changed, 52 insertions(+), 323 deletions(-) diff --git a/src/tabviews/custom/components/group/normal-group/index.jsx b/src/tabviews/custom/components/group/normal-group/index.jsx index 3a2fc09..daaf5c3 100644 --- a/src/tabviews/custom/components/group/normal-group/index.jsx +++ b/src/tabviews/custom/components/group/normal-group/index.jsx @@ -1,355 +1,84 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' -import { is, fromJS } from 'immutable' -import { Col, Empty, notification, Button, Row } from 'antd' +import { DoubleLeftOutlined, DoubleRightOutlined } from '@ant-design/icons' -import Api from '@/api' import asyncComponent from '@/utils/asyncComponent' -import { - getStructuredParams, - getStructDefaultParam -} from '@/utils/utils-datamanage.js' -import Utils from '@/utils/utils.js' +import MKEmitter from '@/utils/events.js' import './index.scss' -// 閫氱敤缁勪欢 -const AntvBarAndLine = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-bar-line')) -const AntvPie = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-pie')) -const AntvDashboard = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-dashboard')) -const AntvScatter = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-scatter')) -const DataCard = asyncComponent(() => import('@/tabviews/custom/components/card/data-card')) -const TableCard = asyncComponent(() => import('@/tabviews/custom/components/card/table-card')) -const NormalTable = asyncComponent(() => import('@/tabviews/custom/components/table/normal-table')) -const EditTable = asyncComponent(() => import('@/tabviews/custom/components/table/edit-table')) -const PropCard = asyncComponent(() => import('@/tabviews/custom/components/card/prop-card')) -const BraftEditor = asyncComponent(() => import('@/tabviews/custom/components/editor/braft-editor')) -const SandBox = asyncComponent(() => import('@/tabviews/custom/components/code/sand-box')) -const SimpleForm = asyncComponent(() => import('@/tabviews/custom/components/form/simple-form')) -const NormalForm = asyncComponent(() => import('@/tabviews/custom/components/form/step-form')) -const TabForm = asyncComponent(() => import('@/tabviews/custom/components/form/tab-form')) -const NormalTree = asyncComponent(() => import('@/tabviews/custom/components/tree/antd-tree')) -const CarouselDataCard = asyncComponent(() => import('@/tabviews/custom/components/carousel/data-card')) -const CarouselPropCard = asyncComponent(() => import('@/tabviews/custom/components/carousel/prop-card')) -const Balcony = asyncComponent(() => import('@/tabviews/custom/components/card/balcony')) -const TimeLine = asyncComponent(() => import('@/tabviews/custom/components/timeline/normal-timeline')) -const CustomChart = asyncComponent(() => import('@/tabviews/custom/components/chart/custom-chart')) +const TabTransfer = asyncComponent(() => import('@/tabviews/custom/components/share/tabtransfer')) -class TabTransfer extends Component { +class NormalGroup extends Component { static propTpyes = { - config: PropTypes.object, // 缁勪欢閰嶇疆淇℃伅 - mainSearch: PropTypes.any, // 鍏ㄥ眬鎼滅储鏉′欢 + config: PropTypes.object } state = { - mainSearch: [], - printing: false, - data: null + visible: true, + hidden: this.props.config.setting.bindPropId ? null : false, + mergeAble: this.props.config.setting.mergeAble === 'true' } - UNSAFE_componentWillMount () { - const { config, mainSearch } = this.props - - // 鑾峰彇涓绘悳绱㈡潯浠� - let _mainSearch = mainSearch ? fromJS(mainSearch).toJS() : [] - let params = [] - config.components.forEach(item => { - if (item.type === 'tabs') return - - if (!item.setting || item.setting.interType !== 'system') return - if (!item.format) return - - if (item.dataName && (!item.pageable || (item.pageable && !item.setting.laypage)) && item.setting.onload === 'true' && item.setting.sync === 'true') { - let searchlist = [] - if (item.search && item.search.length > 0) { - searchlist = Utils.initMainSearch(item.search) - } - if (item.setting.useMSearch) { - let keys = searchlist.map(item => item.key) - _mainSearch.forEach(item => { - if (!keys.includes(item.key)) { - searchlist.push(item) - } - }) - } - - if (searchlist.filter(cell => cell.required && cell.value === '').length > 0) { - item.setting.sync = 'false' - item.setting.onload = 'false' - } else { - params.push(getStructDefaultParam(item, searchlist, params.length === 0)) - } - } else { - item.setting.sync = 'false' - } - }) - - this.setState({mainSearch: _mainSearch}) - - if (params.length > 0) { - this.loadmaindata(params) - } - } - - UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) { - this.setState({mainSearch: null}, () => { - this.setState({mainSearch: fromJS(nextProps.mainSearch).toJS()}) - }) - } - } - - /** - * @description 涓昏〃鏁版嵁鍔犺浇 - */ - loadmaindata = (params) => { - let BID = '' - let BData = window.GLOB.CacheData.get(this.props.config.$pageId) - - if (BData) { - BID = BData.$BID || '' - } - - let param = getStructuredParams(params, this.props.config, BID) - - 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 - }) - } - }) - } - - getComponents = () => { + componentDidMount () { const { config } = this.props - const { mainSearch, data } = this.state - if (!config || !config.components || config.components.length === 0) return (<Empty description={false} />) - - return config.components.map(item => { - if (item.type === 'bar' || item.type === 'line') { - return ( - <Col span={item.width} key={item.uuid}> - <AntvBarAndLine data={data} config={item} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'pie') { - return ( - <Col span={item.width} key={item.uuid}> - <AntvPie data={data} config={item} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'dashboard') { - return ( - <Col span={item.width} key={item.uuid}> - <AntvDashboard config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'form' && item.subtype === 'simpleform') { - return ( - <Col span={item.width} key={item.uuid}> - <SimpleForm config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'form' && item.subtype === 'stepform') { - return ( - <Col span={item.width} key={item.uuid}> - <NormalForm config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'form' && item.subtype === 'tabform') { - return ( - <Col span={item.width} key={item.uuid}> - <TabForm config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'scatter') { - return ( - <Col span={item.width} key={item.uuid}> - <AntvScatter config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'carousel' && item.subtype === 'datacard') { - return ( - <Col span={item.width} key={item.uuid}> - <CarouselDataCard config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'carousel' && item.subtype === 'propcard') { - return ( - <Col span={item.width} key={item.uuid}> - <CarouselPropCard config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'card' && item.subtype === 'datacard') { - return ( - <Col span={item.width} key={item.uuid}> - <DataCard config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'card' && item.subtype === 'propcard') { - return ( - <Col span={item.width} key={item.uuid}> - <PropCard config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'table' && item.subtype === 'tablecard') { - return ( - <Col span={item.width} key={item.uuid}> - <TableCard config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'table' && item.subtype === 'normaltable') { - return ( - <Col span={item.width} key={item.uuid}> - <NormalTable config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'table' && item.subtype === 'editable') { - return ( - <Col span={item.width} key={item.uuid}> - <EditTable config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'tree') { - return ( - <Col span={item.width} key={item.uuid}> - <NormalTree config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'editor') { - return ( - <Col span={item.width} key={item.uuid}> - <BraftEditor config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'code') { - return ( - <Col span={item.width} key={item.uuid}> - <SandBox config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'balcony') { - return ( - <Col span={item.width} key={item.uuid}> - <Balcony config={item} data={data}/> - </Col> - ) - } else if (item.type === 'timeline') { - return ( - <Col span={item.width} key={item.uuid}> - <TimeLine config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else if (item.type === 'chart') { - return ( - <Col span={item.width} key={item.uuid}> - <CustomChart config={item} data={data} mainSearch={mainSearch}/> - </Col> - ) - } else { - return null - } - }) + if (config.setting.bindPropId) { + MKEmitter.addListener('resetSelectLine', this.resetStatus) + } } - print = () => { - const { config } = this.props - const { printing } = this.state - - if (printing) return - this.setState({printing: true}) - - let pageSize = ['A4', 'A3', 'A5'].includes(config.setting.pageSize) ? config.setting.pageSize : 'A4' - let pageLayout = config.setting.pageLayout !== 'horizontal' ? 'vertical' : 'horizontal' - let hides = config.setting.hide || [] - - let pageParam = { - A4: { - vertical: 980, - horizontal: 1200, - }, - A3: { - vertical: 1200, - horizontal: 1600, - }, - A5: { - vertical: 700, - horizontal: 1000, - } + componentWillUnmount () { + this.setState = () => { + return } + MKEmitter.removeListener('resetSelectLine', this.resetStatus) + } - let width = pageParam[pageSize][pageLayout] + resetStatus = (MenuID, _, data) => { + const { config } = this.props - try { - let jubuData = document.getElementById(config.uuid).innerHTML + if (config.setting.bindPropId !== MenuID) return - let iframe = document.createElement('IFRAME') - let linkList = document.getElementsByTagName('link') // 鑾峰彇鐖剁獥鍙ink鏍囩瀵硅薄鍒楄〃 - let styleList = document.getElementsByTagName('style') // 鑾峰彇鐖剁獥鍙tyle鏍囩瀵硅薄鍒楄〃 - - document.body.appendChild(iframe) - let doc = iframe.contentWindow.document - - doc.open() - doc.write(`<!DOCTYPE html><html lang="en"><head>`) - for (let i = 0;i < linkList.length;i++) { - if (linkList[i].type === 'text/css') { - doc.write(`<LINK rel="stylesheet" type="text/css" href="${linkList[i].href}">`) - } - } - doc.write(`<style>body{width: ${width}px!important;} *{border-style: solid;border-width: 0;} .print-button{display: none!important;} ${hides.includes('search') ? '.top-search{display: none!important;}' : ''} ${hides.includes('button') ? '.ant-btn{opacity: 0!important;}' : ''}</style>`) - for (let i = 0;i < styleList.length;i++) { - doc.write('<style>' + styleList[i].innerHTML + '</style>') - } - doc.write(`</head><body>`) - doc.write(jubuData) - doc.write(`</body></html>`) - doc.close() - - setTimeout(() => { - iframe.contentWindow.focus() - iframe.contentWindow.print() - - document.body.removeChild(iframe) - - this.setState({printing: false}) - }, 500) - } catch (e) { - this.setState({printing: false}) - notification.warning({ - top: 92, - message: '鎵撳嵃寮傚父锛�', - duration: 5 - }) + if (!data || data.$$empty) { + this.setState({hidden: true}) + } else { + this.setState({hidden: false}) } } render() { - const { config } = this.props - const { printing } = this.state + const { config, style } = this.props + const { visible, mergeAble, hidden } = this.state + if (config.components.length === 0) return (<div className={'ant-col ant-col-' + config.width} style={style}><div style={config.style}></div></div>) + + let _wrapStyle = style + if (hidden) { + _wrapStyle = {...style} + _wrapStyle.display = 'none' + } + + let title = config.setting && config.setting.title + + if (title && hidden === null) { + title = '' + } + return ( - <div className={'normal-group-wrap ' + (config.setting.layout || '')} id={config.uuid} style={config.style}> - {config.setting && config.setting.print === 'true' ? <Button className="print-button" icon="printer" loading={printing} onClick={this.print}></Button> : null} - <Row className="component-wrap">{this.getComponents()}</Row> + <div className={`ant-col ant-col-${config.width} ${mergeAble ? ' mk-merge-able mk-ctrl-' + (config.setting.ctrlNumber || 1) : ''} ${visible ? '' : ' close'}`} style={_wrapStyle}> + <div className={'normal-group-wrap ' + (config.setting.layout || '')} id={'anchor' + config.uuid} style={config.style}> + <div className="mk-control"> + <DoubleLeftOutlined onClick={() => this.setState({visible: false})}/> + <DoubleRightOutlined onClick={() => this.setState({visible: true})}/> + </div> + {title ? <div className="group-header" style={config.headerStyle}> + <span className="title">{title}</span> + </div> : null} + <TabTransfer config={config}/> + </div> </div> ) } } -export default TabTransfer \ No newline at end of file +export default NormalGroup \ No newline at end of file -- Gitblit v1.8.0