src/menu/components/tree/antd-tree/index.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/tabviews/custom/components/tree/antd-tree/index.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/tabviews/custom/components/tree/antd-tree/index.scss | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/menu/components/tree/antd-tree/index.jsx
@@ -2,12 +2,13 @@ import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' import { Popover, Tree, message } from 'antd' import { EditOutlined, ToolOutlined, DeleteOutlined, FontColorsOutlined, FileOutlined, FolderOpenOutlined } from '@ant-design/icons' import { EditOutlined, ToolOutlined, DeleteOutlined, FontColorsOutlined, FileOutlined, FolderOpenOutlined, PlusSquareOutlined } from '@ant-design/icons' import asyncComponent from '@/utils/asyncComponent' import asyncIconComponent from '@/utils/asyncIconComponent' import { resetStyle, getTables } from '@/utils/utils-custom.js' import MKEmitter from '@/utils/events.js' import Utils from '@/utils/utils.js' import getWrapForm from './options' import './index.scss' @@ -18,6 +19,7 @@ const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent')) const UserComponent = asyncIconComponent(() => import('@/menu/components/share/usercomponent')) const ClockComponent = asyncIconComponent(() => import('@/menu/components/share/clockcomponent')) const ActionComponent = asyncComponent(() => import('@/menu/components/share/actioncomponent')) const { TreeNode } = Tree @@ -52,6 +54,7 @@ headerStyle: { fontSize: '16px', borderBottomWidth: '1px', borderBottomColor: '#e8e8e8' }, columns: [], scripts: [], action: [], } if (card.config) { @@ -69,8 +72,11 @@ this.updateComponent(_card) } else { let _card = fromJS(card).toJS() _card.action = _card.action || [] // 兼容 this.setState({ card: fromJS(card).toJS() card: _card }) } } @@ -138,6 +144,58 @@ this.updateComponent(_card) } addButton = (copy) => { const { card } = this.state let newcard = {} if (copy) { newcard = copy newcard.focus = true } else { newcard.uuid = Utils.getuuid() newcard.focus = true newcard.label = 'label' newcard.Ot = 'requiredSgl' newcard.OpenType = 'pop' newcard.icon = '' newcard.class = 'green' newcard.intertype = card.setting.interType || 'system' newcard.innerFunc = card.setting.innerFunc || '' newcard.sysInterface = card.setting.sysInterface || '' newcard.outerFunc = card.setting.outerFunc || '' newcard.interface = card.setting.interface || '' newcard.execSuccess = 'grid' newcard.execError = 'never' newcard.verify = null newcard.show = 'button' newcard.style = {marginRight: '15px'} } // 注册事件-添加按钮 MKEmitter.emit('addButton', card.uuid, newcard) } setSubConfig = (item) => { const { card, appType } = this.state let btn = fromJS(item).toJS() if (btn.OpenType === 'pop' || btn.execMode === 'pop') { if (!btn.modal) { btn.modal = { setting: { title: btn.label, width: appType === 'mob' ? 100 : 60, cols: '2', container: 'view', focus: '', finish: 'close', clickouter: 'unclose', display: 'modal' }, tables: [], groups: [], fields: [] } } MKEmitter.emit('changeModal', card, btn) } else if (btn.OpenType === 'popview' && appType !== 'mob') { MKEmitter.emit('changePopview', card, btn) } } getWrapForms = () => { const { wrap, columns } = this.state.card @@ -168,8 +226,10 @@ return ( <div className="menu-tree-box" style={_style} onClick={this.clickComponent} id={card.uuid}> <NormalHeader config={card} updateComponent={this.updateComponent}/> <ActionComponent config={card} setSubConfig={this.setSubConfig} updateaction={this.updateComponent}/> <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ <div className="mk-popover-control"> <PlusSquareOutlined className="plus" title="添加按钮" onClick={() => this.addButton()}/> <NormalForm title="基本设置" width={800} update={this.updateWrap} getForms={this.getWrapForms}> <EditOutlined style={{color: '#1890ff'}} title="编辑"/> </NormalForm> src/tabviews/custom/components/tree/antd-tree/index.jsx
@@ -1,17 +1,20 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' import { Spin, Empty, notification, Input, Tree, Modal } from 'antd' import { FolderOpenOutlined, FolderOutlined, FileOutlined } from '@ant-design/icons' import { Spin, Empty, notification, Input, Tree, Modal, Dropdown } from 'antd' import { FolderOpenOutlined, FolderOutlined, FileOutlined, MoreOutlined } from '@ant-design/icons' import Api from '@/api' import UtilsDM from '@/utils/utils-datamanage.js' import MKEmitter from '@/utils/events.js' import TimerTask from '@/utils/timer-task.js' import asyncComponent from '@/utils/asyncComponent' import './index.scss' const { TreeNode } = Tree const { Search } = Input const MainAction = asyncComponent(() => import('@/tabviews/zshare/actionList')) class NormalTree extends Component { static propTpyes = { @@ -390,14 +393,34 @@ */ renderTreeNodes = (nodes) => { return nodes.map(item => { let title = item.$title title = <> {item.$title} <Dropdown overlay={ <div className="mk-tree-dropdown-wrap" onClick={(e) => e.stopPropagation()}> <MainAction BID={this.state.BID} BData={this.state.BData} setting={this.state.config.setting} actions={this.state.config.action} columns={this.state.config.columns} selectedData={[item]} /> </div> } placement="bottomCenter" trigger={['hover']}> <MoreOutlined onClick={(e) => e.stopPropagation()}/> </Dropdown> </> if (item.children) { return ( <TreeNode icon={<span><FolderOpenOutlined /><FolderOutlined /></span>} title={item.$title} key={item.$key} dataRef={item}> <TreeNode icon={<span><FolderOpenOutlined /><FolderOutlined /></span>} title={title} key={item.$key} dataRef={item}> {this.renderTreeNodes(item.children)} </TreeNode> ) } return <TreeNode icon={<FileOutlined />} key={item.$key} title={item.$title} dataRef={item} isLeaf /> return <TreeNode icon={<FileOutlined />} key={item.$key} title={title} dataRef={item} isLeaf /> }) } src/tabviews/custom/components/tree/antd-tree/index.scss
@@ -54,6 +54,15 @@ .ant-tree-node-content-wrapper-open > span > span > .anticon-folder { display: none; } .ant-tree-node-content-wrapper { position: relative; .anticon-more { position: absolute; right: 0px; padding: 5px 10px; color: var(--mk-sys-color); } } } .tree-box::-webkit-scrollbar { @@ -80,7 +89,8 @@ } } .tree-header + .ant-empty { margin-top: 35px; position: static; margin-top: 20px; } .loading-mask { position: absolute; @@ -103,3 +113,26 @@ } } } .mk-tree-dropdown-wrap { box-shadow: 0 0 2px #bcbcbc; background: #ffffff; min-width: 85px; .button-list.toolbar-button { padding: 0px; } button { display: block; margin: 0!important; width: 100%; height: 34px; border-radius: 0px; padding-left: 15px!important; .anticon { display: none; } .anticon + span { margin-left: 0px; } } }