| | |
| | | render() { |
| | | const { type, ...resProps } = this.props |
| | | |
| | | if (!type || !MkIcons[type]) return null |
| | | |
| | | return ( |
| | | MkIcons[type](resProps) |
| | | ) |
| | | if (!type) { |
| | | return null |
| | | } else if (MkIcons[type]) { |
| | | return ( |
| | | MkIcons[type](resProps) |
| | | ) |
| | | } else { |
| | | return <span className={'anticon ' + (resProps.className || '')} style={resProps.style || null} dangerouslySetInnerHTML={{ __html: type }}></span> |
| | | } |
| | | } |
| | | } |
| | | export default MkIcon |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Modal, Row, Col, Button } from 'antd' |
| | | import { CloseCircleFilled } from '@ant-design/icons' |
| | | import { Modal, Row, Col, Button, Tabs, notification } from 'antd' |
| | | import { CloseCircleFilled, RedoOutlined } from '@ant-design/icons' |
| | | |
| | | import Api from '@/api' |
| | | import { minkeIconSystem } from '@/utils/option.js' |
| | | import MkIcon from '@/components/mk-icon' |
| | | import './index.scss' |
| | | |
| | | const { TabPane } = Tabs |
| | | // ['direction', 'edit', 'normal', 'data', 'hint'] |
| | | |
| | | class MkEditIcon extends Component { |
| | |
| | | selectIcon: '', |
| | | allowClear: false, |
| | | icons: [], |
| | | cusicons: [], |
| | | visible: false |
| | | } |
| | | |
| | |
| | | this.setState({selectIcon: val, allowClear: this.props.allowClear === true, icons}) |
| | | } |
| | | |
| | | componentDidMount() { |
| | | if (!window.GLOB.designView) { |
| | | if (sessionStorage.getItem('systemIcons')) { |
| | | this.setState({cusicons: JSON.parse(sessionStorage.getItem('systemIcons'))}) |
| | | } else { |
| | | this.getIcons() |
| | | } |
| | | } |
| | | } |
| | | |
| | | shouldComponentUpdate (nextProps, nextState) { |
| | | return !is(fromJS(this.state), fromJS(nextState)) |
| | | } |
| | |
| | | this.props.onChange(val) |
| | | } |
| | | |
| | | getIcons = () => { |
| | | Api.getSystemConfig({ func: 's_get_icons' }).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | sessionStorage.setItem('systemIcons', JSON.stringify([])) |
| | | return |
| | | } else if (!res.data) { |
| | | return |
| | | } |
| | | |
| | | let icons = res.data.map(item => { |
| | | item.icon_svg = window.decodeURIComponent(window.atob(item.icon_svg)) |
| | | return item |
| | | }) |
| | | |
| | | sessionStorage.setItem('systemIcons', JSON.stringify(icons)) |
| | | |
| | | this.setState({cusicons: icons}) |
| | | }) |
| | | } |
| | | |
| | | render() { |
| | | const { selectIcon, visible, icons, allowClear } = this.state |
| | | const { selectIcon, visible, icons, allowClear, cusicons } = this.state |
| | | |
| | | return ( |
| | | <div className="mk-icon-box"> |
| | |
| | | <MkIcon className="trigger" onClick={() => this.setState({visible: true})} type="swap"/> |
| | | {allowClear && selectIcon ? <CloseCircleFilled className="close" onClick={() => this.checkIcon('')}/> : null} |
| | | <Modal |
| | | wrapClassName="popview-modal mk-icon-wrap" |
| | | title={'图标选择'} |
| | | wrapClassName="mk-pop-modal mk-icon-wrap" |
| | | // title={'图标选择'} |
| | | visible={visible} |
| | | width={800} |
| | | maskClosable={false} |
| | |
| | | ]} |
| | | destroyOnClose |
| | | > |
| | | <Row> |
| | | {icons.map(icon => <Col className={icon === selectIcon ? 'active' : ''} key={icon} span={4}> |
| | | <MkIcon onClick={() => this.checkIcon(icon)} type={icon} /> |
| | | </Col>)} |
| | | </Row> |
| | | <Tabs className={cusicons.length > 0 ? 'dubble-tabs' : ''}> |
| | | <TabPane tab="系统" key="setting"> |
| | | <Row> |
| | | {icons.map(icon => <Col className={icon === selectIcon ? 'active' : ''} key={icon} span={4}> |
| | | <MkIcon onClick={() => this.checkIcon(icon)} type={icon} /> |
| | | </Col>)} |
| | | </Row> |
| | | </TabPane> |
| | | <TabPane tab={ |
| | | <span className="tab-control"> |
| | | <RedoOutlined onClick={(e) => {this.getIcons()}}/> |
| | | 自定义 |
| | | </span> |
| | | } key="scripts"> |
| | | <Row> |
| | | {cusicons.map(icon => <Col key={icon.id} span={4} onClick={() => this.checkIcon(icon.icon_svg)}> |
| | | <MkIcon type={icon.icon_svg} /> |
| | | </Col>)} |
| | | </Row> |
| | | </TabPane> |
| | | </Tabs> |
| | | </Modal> |
| | | </div> |
| | | ) |
| | |
| | | clear: both; |
| | | } |
| | | .mk-icon-wrap { |
| | | .ant-modal { |
| | | top: 50px!important; |
| | | } |
| | | .ant-col { |
| | | text-align: center; |
| | | line-height: 55px; |
| | |
| | | color: #1890ff; |
| | | } |
| | | } |
| | | .tab-control { |
| | | position: relative; |
| | | .anticon-redo { |
| | | display: none; |
| | | position: absolute; |
| | | left: -20px; |
| | | top: 0px; |
| | | } |
| | | } |
| | | .ant-tabs-tab-active.ant-tabs-tab { |
| | | .tab-control { |
| | | .anticon-redo { |
| | | display: inline-block; |
| | | } |
| | | } |
| | | } |
| | | .ant-tabs-nav .ant-tabs-tab { |
| | | padding: 12px 20px; |
| | | } |
| | | .ant-tabs-top.dubble-tabs { |
| | | .ant-tabs-bar { |
| | | padding-top: 10px!important; |
| | | } |
| | | } |
| | | .ant-tabs-top:not(.dubble-tabs) { |
| | | .ant-tabs-top-bar { |
| | | border-bottom: 0px; |
| | | .ant-tabs-nav-container { |
| | | display: none; |
| | | } |
| | | } |
| | | .ant-tabs-content { |
| | | max-height: calc(100vh - 180px)!important; |
| | | } |
| | | } |
| | | } |
| | |
| | | group.subButton.style = style |
| | | } else if (card.type === 'next') { |
| | | group.nextButton.style = style |
| | | } else if (card.type === 'close') { |
| | | group.closeButton.style = style |
| | | } |
| | | |
| | | this.props.updateconfig(group) |
| | |
| | | newcard.focus = true |
| | | newcard.label = 'button' |
| | | newcard.verify = null |
| | | newcard.show = 'link' |
| | | newcard.show = 'button' |
| | | newcard.Ot = 'requiredSgl' |
| | | newcard.OpenType = item.value |
| | | newcard.class = 'primary' |
| | |
| | | return |
| | | } |
| | | |
| | | if (change && columns.length === 0) { |
| | | reject() |
| | | return |
| | | } |
| | | |
| | | if ((setting.interType === 'system' && setting.execute !== 'false') || _scripts.length > 0) { |
| | | let timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | let r = SettingUtils.getDebugSql(setting, _scripts, columns, searches, defaultSearch, timestamp) |
| | |
| | | }) |
| | | } |
| | | |
| | | if (!arr_field) { |
| | | arr_field = '*' |
| | | } |
| | | |
| | | if (setting.interType === 'system' && setting.execute !== 'false') { |
| | | _dataresource = setting.dataresource || '' |
| | | } |
| | |
| | | |
| | | let sumSql = '' |
| | | |
| | | if (arr_field && _dataresource && /\/\*\$sum@/ig.test(_dataresource)) { |
| | | if (_dataresource && /\/\*\$sum@/ig.test(_dataresource)) { |
| | | let _sql = _dataresource.replace(/\/\*\$sum@|@sum\$\*\//ig, '') |
| | | _sql = `/*system_query*/${_sql} ${_search}` |
| | | if (_customScript) { |
| | |
| | | } |
| | | |
| | | // 数据源处理, 存在显示列时 |
| | | if (arr_field && _dataresource) { |
| | | if (_dataresource) { |
| | | if (/\s/.test(_dataresource)) { |
| | | _dataresource = '(' + _dataresource + ') tb' |
| | | } |
| | |
| | | sumSql = sumSql.replace(/\n/g, ' ') |
| | | } |
| | | sql = sql.replace(/\n/g, ' ') |
| | | |
| | | |
| | | return { error, sql, sumSql, errors: errors.join(';') } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | .grid-layout { |
| | | >.ant-col { |
| | | display: inline-block; |
| | | float: none; |
| | | vertical-align: top; |
| | | } |
| | | } |
| | | } |
| | | .menu-menubar-edit-box::after { |
| | | display: block; |
New file |
| | |
| | | import React, { Component } from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Popover } from 'antd' |
| | | import { ToolOutlined, EditOutlined, FontColorsOutlined, DeleteOutlined } from '@ant-design/icons' |
| | | |
| | | import { resetStyle } from '@/utils/utils-custom.js' |
| | | import asyncIconComponent from '@/utils/asyncIconComponent' |
| | | import getWrapForm from './options' |
| | | import MKEmitter from '@/utils/events.js' |
| | | import ShareImg from '@/assets/mobimg/share.jpg' |
| | | import './index.scss' |
| | | |
| | | const NormalForm = asyncIconComponent(() => import('@/components/normalform')) |
| | | |
| | | class ShareComponent extends Component { |
| | | static propTpyes = { |
| | | card: PropTypes.object, |
| | | updateConfig: PropTypes.func, |
| | | deletecomponent: PropTypes.func |
| | | } |
| | | |
| | | state = {} |
| | | |
| | | /** |
| | | * @description 搜索条件初始化 |
| | | */ |
| | | UNSAFE_componentWillMount () { |
| | | const { card } = this.props |
| | | |
| | | if (card.isNew) { |
| | | let _card = { |
| | | uuid: card.uuid, |
| | | type: card.type, |
| | | width: 24, |
| | | name: card.name, |
| | | subtype: card.subtype, |
| | | wrap: { name: card.name, width: 24 }, |
| | | style: {marginLeft: '8px', marginRight: '8px', marginTop: '8px', marginBottom: '8px', paddingLeft: '20px', paddingRight: '20px', paddingTop: '20px', paddingBottom: '20px'} |
| | | } |
| | | this.setState({ |
| | | card: _card |
| | | }) |
| | | this.props.updateConfig(_card) |
| | | } else { |
| | | this.setState({ |
| | | card: fromJS(card).toJS() |
| | | }) |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 组件销毁,清除state更新 |
| | | */ |
| | | componentWillUnmount () { |
| | | this.setState = () => { |
| | | return |
| | | } |
| | | } |
| | | |
| | | shouldComponentUpdate (nextProps, nextState) { |
| | | return !is(fromJS(this.state), fromJS(nextState)) |
| | | } |
| | | |
| | | getStyle = (style) => { |
| | | let _card = {...this.state.card, style} |
| | | |
| | | this.setState({ |
| | | card: _card |
| | | }) |
| | | |
| | | this.props.updateConfig(_card) |
| | | } |
| | | |
| | | changeStyle = () => { |
| | | const { card } = this.state |
| | | |
| | | MKEmitter.emit('changeStyle', ['border', 'padding', 'margin', 'shadow', 'clear'], card.style, this.getStyle) |
| | | } |
| | | |
| | | /** |
| | | * @description 卡片行外层信息更新(数据源,样式等) |
| | | */ |
| | | updateComponent = (component) => { |
| | | this.setState({ |
| | | card: component |
| | | }) |
| | | |
| | | component.width = component.wrap.width |
| | | component.name = component.wrap.name |
| | | |
| | | this.props.updateConfig(component) |
| | | } |
| | | |
| | | getWrapForms = () => { |
| | | const { wrap } = this.state.card |
| | | |
| | | return getWrapForm(wrap) |
| | | } |
| | | |
| | | updateWrap = (res) => { |
| | | this.updateComponent({...this.state.card, wrap: res}) |
| | | } |
| | | |
| | | render() { |
| | | const { card } = this.state |
| | | let _style = resetStyle(card.style) |
| | | |
| | | return ( |
| | | <div className="share-wrap" id={card.uuid} style={_style}> |
| | | <div className="share-image" style={{backgroundImage: `url('${ShareImg}')`}}></div> |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control"> |
| | | <NormalForm title="设置" width={800} update={this.updateWrap} getForms={this.getWrapForms}> |
| | | <EditOutlined style={{color: '#1890ff'}} title="编辑"/> |
| | | </NormalForm> |
| | | <FontColorsOutlined className="style" title="调整样式" onClick={this.changeStyle}/> |
| | | <DeleteOutlined className="close" onClick={() => this.props.deletecomponent(card.uuid)} /> |
| | | </div> |
| | | } trigger="hover"> |
| | | <ToolOutlined /> |
| | | </Popover> |
| | | <div className="component-name"><div className="center">{card.name}</div></div> |
| | | </div> |
| | | ) |
| | | } |
| | | } |
| | | |
| | | export default ShareComponent |
New file |
| | |
| | | .share-wrap { |
| | | min-height: 84px; |
| | | position: relative; |
| | | background: #ffffff; |
| | | overflow: hidden; |
| | | |
| | | >.anticon-tool { |
| | | position: absolute; |
| | | z-index: 3; |
| | | font-size: 16px; |
| | | right: 1px; |
| | | top: 1px; |
| | | cursor: pointer; |
| | | padding: 5px; |
| | | background: rgba(255, 255, 255, 0.55); |
| | | } |
| | | .share-image { |
| | | background: #ffffff; |
| | | overflow: hidden; |
| | | background-repeat: no-repeat; |
| | | background-size: cover; |
| | | background-position: center; |
| | | padding-top: 100%; |
| | | } |
| | | } |
| | | |
| | | .share-wrap::after { |
| | | display: block; |
| | | content: ' '; |
| | | clear: both; |
| | | } |
| | | .share-wrap:hover { |
| | | z-index: 1; |
| | | box-shadow: 0px 0px 4px #1890ff; |
| | | } |
New file |
| | |
| | | /** |
| | | * @description Wrap表单配置信息 |
| | | */ |
| | | export default function (wrap) { |
| | | let menulist = sessionStorage.getItem('appMenus') |
| | | |
| | | if (menulist) { |
| | | try { |
| | | menulist = JSON.parse(menulist) |
| | | } catch (e) { |
| | | menulist = [] |
| | | } |
| | | } else { |
| | | menulist = [] |
| | | } |
| | | |
| | | const wrapForm = [ |
| | | { |
| | | type: 'text', |
| | | field: 'name', |
| | | label: '组件名称', |
| | | initval: wrap.name || '', |
| | | tooltip: '用于组件间的区分。', |
| | | required: true |
| | | }, |
| | | { |
| | | type: 'number', |
| | | field: 'width', |
| | | label: '宽度', |
| | | initval: wrap.width || 24, |
| | | tooltip: '栅格布局,每行等分为24列。', |
| | | min: 1, |
| | | max: 24, |
| | | precision: 0, |
| | | required: true |
| | | }, |
| | | { |
| | | type: 'select', |
| | | field: 'linkMenuId', |
| | | label: '关联菜单', |
| | | initval: wrap.linkMenuId || '', |
| | | tooltip: '可自定义分享菜单,空值时为当前页面。', |
| | | required: false, |
| | | options: menulist |
| | | }, |
| | | { |
| | | type: 'color', |
| | | field: 'color', |
| | | label: '颜色', |
| | | initval: wrap.color || '#000000', |
| | | tooltip: '小程序中无效。', |
| | | isHex: true, |
| | | required: true |
| | | }, |
| | | ] |
| | | |
| | | return wrapForm |
| | | } |
| | |
| | | const Balcony = asyncComponent(() => import('@/menu/components/card/balcony')) |
| | | const Timeline = asyncComponent(() => import('@/menu/components/timeline/normal-timeline')) |
| | | const OfficialAccount = asyncComponent(() => import('@/mob/components/official')) |
| | | const ShareCode = asyncComponent(() => import('@/mob/components/sharecode')) |
| | | const Iframe = asyncComponent(() => import('@/menu/components/iframe')) |
| | | |
| | | const Card = ({ id, card, moveCard, findCard, delCard, updateConfig }) => { |
| | |
| | | return (<OfficialAccount card={card} updateConfig={updateConfig} deletecomponent={delCard}/>) |
| | | } else if (card.type === 'iframe') { |
| | | return (<Iframe card={card} updateConfig={updateConfig} deletecomponent={delCard}/>) |
| | | } else if (card.type === 'sharecode') { |
| | | return (<ShareCode card={card} updateConfig={updateConfig} deletecomponent={delCard}/>) |
| | | } |
| | | } |
| | | |
| | |
| | | balcony: '浮动卡', |
| | | timeline: '时间轴', |
| | | officialAccount: '关注公众号', |
| | | sharecode: '分享码', |
| | | login: '登录' |
| | | } |
| | | let i = 1 |
| | |
| | | import timeline from '@/assets/mobimg/timeline.png' |
| | | import officialAccount from '@/assets/mobimg/guanzhu.jpg' |
| | | import Iframe from '@/assets/img/newpage.jpg' |
| | | import Share from '@/assets/mobimg/share.jpg' |
| | | |
| | | // 组件配置信息 |
| | | export const menuOptions = [ |
| | |
| | | { type: 'menu', url: group, component: 'group', subtype: 'normalgroup', title: '分组', width: 24 }, |
| | | { type: 'menu', url: Login, component: 'login', subtype: 'normallogin', title: '注册/登录', width: 24 }, |
| | | { type: 'menu', url: officialAccount, component: 'officialAccount', subtype: 'officialAccount', title: '关注公众号(小程序中)', width: 24, adapter: 'mini' }, |
| | | { type: 'menu', url: Share, component: 'sharecode', subtype: 'sharecode', title: '分享码', width: 24 }, |
| | | { type: 'menu', url: Iframe, component: 'iframe', subtype: 'iframe', title: 'iframe', width: 24 } |
| | | ] |
| | |
| | | } |
| | | |
| | | // 权限过滤 |
| | | if (!window.GLOB.mkHS) { |
| | | if (config.tab && !window.GLOB.mkActions[config.tab.linkTab]) { |
| | | config.tab = null |
| | | } |
| | | } |
| | | if (config.tab) { |
| | | config.tab.uuid = Utils.getuuid() |
| | | } |
| | |
| | | render() { |
| | | const { config, loading, BID, BData, data, group, dict } = this.state |
| | | |
| | | if (config.setting.supModule && !BID) return null |
| | | |
| | | return ( |
| | | <div className="custom-simple-form-box" id={'anchor' + config.uuid} style={{...config.style}}> |
| | | {loading ? |
| | |
| | | dict={dict} |
| | | data={data} |
| | | action={group} |
| | | unload={config.setting.supModule && !BID} |
| | | inputSubmit={() => this.mkFormSubmit(group.uuid)} |
| | | wrappedComponentRef={(inst) => this.formRef = inst} |
| | | /> : null} |
| | |
| | | render() { |
| | | const { config, loading, BID, BData, data, group, dict, step } = this.state |
| | | |
| | | if (config.setting.supModule && !BID) return null |
| | | |
| | | return ( |
| | | <div className="custom-normal-form-box" id={'anchor' + config.uuid} style={{...config.style}}> |
| | | {loading ? |
| | |
| | | dict={dict} |
| | | data={data} |
| | | action={group} |
| | | unload={config.setting.supModule && !BID} |
| | | inputSubmit={() => this.mkFormSubmit(group.uuid)} |
| | | wrappedComponentRef={(inst) => this.formRef = inst} |
| | | /> : null} |
| | |
| | | render() { |
| | | const { config, loading, BID, BData, data, group, dict } = this.state |
| | | |
| | | if (config.setting.supModule && !BID) return null |
| | | |
| | | return ( |
| | | <div className="custom-tab-form-box" id={'anchor' + config.uuid} style={{...config.style}}> |
| | | {loading ? |
| | |
| | | dict={dict} |
| | | data={data} |
| | | action={group} |
| | | unload={config.setting.supModule && !BID} |
| | | inputSubmit={() => this.mkFormSubmit(group.uuid)} |
| | | wrappedComponentRef={(inst) => this.formRef = inst} |
| | | /> : null} |
| | |
| | | BData={BData} |
| | | columns={config.columns} |
| | | selectedData={selectedData} |
| | | /> : <div style={{height: '25px'}}></div>} |
| | | /> : <div className="mk-action-space" style={{height: '25px'}}></div>} |
| | | <div className="main-table-box"> |
| | | <MainTable |
| | | setting={setting} |
| | |
| | | BData={BData} |
| | | columns={config.columns} |
| | | selectedData={selectedData} |
| | | /> : <div style={{height: '15px'}}></div>} |
| | | /> : <div className="mk-action-space" style={{height: '25px'}}></div>} |
| | | <div className={'main-table-box ' + (!actions || actions.length === 0 ? 'no-action' : '')}> |
| | | <MainTable |
| | | setting={setting} |
| | |
| | | config.tabgroups = _tabgroups |
| | | } |
| | | |
| | | if (!window.GLOB.mkHS) { |
| | | config.action = config.action.filter(item => window.GLOB.mkActions[item.uuid]) |
| | | config.tabgroups.forEach(group => { |
| | | group.sublist = group.sublist.filter(tab => { |
| | | if (tab.supMenu === 'mainTable') { |
| | | tab.supMenu = MenuID |
| | | } |
| | | tab.ContainerId = this.state.ContainerId |
| | | return window.GLOB.mkActions[tab.linkTab] |
| | | }) |
| | | config.tabgroups.forEach(group => { |
| | | group.sublist = group.sublist.map(tab => { |
| | | if (tab.supMenu === 'mainTable') { |
| | | tab.supMenu = MenuID |
| | | } |
| | | tab.ContainerId = this.state.ContainerId |
| | | return tab |
| | | }) |
| | | } else { |
| | | config.tabgroups.forEach(group => { |
| | | group.sublist = group.sublist.filter(tab => { |
| | | if (tab.supMenu === 'mainTable') { |
| | | tab.supMenu = MenuID |
| | | } |
| | | tab.ContainerId = this.state.ContainerId |
| | | return true |
| | | }) |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | // 按钮类型兼容 |
| | | config.action = config.action.map(item => { |
| | |
| | | config = updateSubTable(config) |
| | | |
| | | // 权限过滤 |
| | | if (!window.GLOB.mkHS) { |
| | | config.action = config.action.filter(item => item.hidden !== 'true' && window.GLOB.mkActions[item.uuid]) |
| | | } else { |
| | | config.action = config.action.filter(item => item.hidden !== 'true') |
| | | } |
| | | config.action = config.action.filter(item => item.hidden !== 'true') |
| | | |
| | | config.search = Utils.initSearchVal(config.search) |
| | | |
| | |
| | | } |
| | | |
| | | // 权限过滤 |
| | | if (!window.GLOB.mkHS) { |
| | | config.action = config.action.filter(item => item.hidden !== 'true' && window.GLOB.mkActions[item.uuid]) |
| | | } else { |
| | | config.action = config.action.filter(item => item.hidden !== 'true') |
| | | } |
| | | config.action = config.action.filter(item => item.hidden !== 'true') |
| | | |
| | | config.search = Utils.initSearchVal(config.search) |
| | | |
| | |
| | | |
| | | // 权限过滤 |
| | | config.tabgroups.forEach(group => { |
| | | group.sublist = group.sublist.filter(tab => { |
| | | group.sublist = group.sublist.map(tab => { |
| | | if (tab.supMenu === 'mainTable' || (!tab.supMenu && tab.level === 0)) { |
| | | tab.isTreeNode = true |
| | | } |
| | |
| | | } |
| | | tab.ContainerId = this.state.ContainerId |
| | | |
| | | return window.GLOB.mkActions[tab.linkTab]} |
| | | ) |
| | | return tab |
| | | }) |
| | | }) |
| | | |
| | | let _tabgroups = [] |
| | |
| | | import MkIcon from '@/components/mk-icon' |
| | | // import './index.scss' |
| | | |
| | | const { confirm } = Modal |
| | | |
| | | class ExcelInButton extends Component { |
| | | static propTpyes = { |
| | | BID: PropTypes.string, // 主表ID |
| | |
| | | |
| | | param.excel_in_type = 'true' |
| | | param.LText1 = Utils.formatOptions(result.insert) |
| | | param.LText2 = Utils.formatOptions(result.bottom) |
| | | param.LText = Utils.formatOptions(result.sql) |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.LText2 = result.bottom |
| | | param.LText = result.sql |
| | | |
| | | let unCheckParam = null |
| | | |
| | | if (/\$check@|@check\$/ig.test(param.LText2) || /\$check@|@check\$/ig.test(param.LText)) { |
| | | unCheckParam = fromJS(param).toJS() |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | param.LText2 = param.LText2.replace(/\$check@|@check\$/ig, '') |
| | | } |
| | | |
| | | param.LText2 = Utils.formatOptions(param.LText2) |
| | | param.LText = Utils.formatOptions(param.LText) |
| | | param.secretkey = Utils.encrypt(param.LText, param.timestamp) |
| | | if (window.GLOB.mkHS && param.timestamp) { // 云端验证 |
| | | param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) |
| | | } |
| | | |
| | | param.menuname = btn.logLabel |
| | | |
| | | |
| | | if (window.GLOB.probation) { |
| | | param.s_debug_type = 'Y' |
| | | } |
| | | |
| | | Api.genericInterface(param).then((res) => { |
| | | if (res.status) { |
| | | this.execSuccess(res) |
| | | } else { |
| | | this.execError(res) |
| | | if (unCheckParam) { |
| | | unCheckParam.LText = unCheckParam.LText.replace(/\$check@/ig, '/*').replace(/@check\$/ig, '*/') |
| | | unCheckParam.LText = Utils.formatOptions(unCheckParam.LText) |
| | | unCheckParam.LText2 = unCheckParam.LText2.replace(/\$check@/ig, '/*').replace(/@check\$/ig, '*/') |
| | | unCheckParam.LText2 = Utils.formatOptions(unCheckParam.LText2) |
| | | |
| | | unCheckParam.secretkey = Utils.encrypt(unCheckParam.LText, unCheckParam.timestamp) |
| | | |
| | | unCheckParam.menuname = btn.logLabel |
| | | |
| | | if (window.GLOB.probation) { |
| | | unCheckParam.s_debug_type = 'Y' |
| | | } |
| | | }, () => { |
| | | this.execError({}) |
| | | }) |
| | | |
| | | Api.genericInterface(param).then(res => { |
| | | if (res.status) { |
| | | this.execSuccess(res) |
| | | } else if (res.ErrCode === 'C') { |
| | | const _this = this |
| | | confirm({ |
| | | title: '继续执行?', |
| | | content: res.message, |
| | | onOk() { |
| | | return new Promise(resolve => { |
| | | Api.genericInterface(unCheckParam).then(result => { |
| | | if (result.status) { |
| | | _this.execSuccess(result) |
| | | } else { |
| | | _this.execError(result) |
| | | } |
| | | resolve() |
| | | }) |
| | | }) |
| | | }, |
| | | onCancel() { |
| | | _this.execError(res) |
| | | } |
| | | }) |
| | | } else { |
| | | this.execError(res) |
| | | } |
| | | }, () => { |
| | | this.execError({}) |
| | | }) |
| | | } else { |
| | | Api.genericInterface(param).then((res) => { |
| | | if (res.status) { |
| | | this.execSuccess(res) |
| | | } else { |
| | | this.execError(res) |
| | | } |
| | | }, () => { |
| | | this.execError({}) |
| | | }) |
| | | } |
| | | } else if (btn.intertype === 'inner' && btn.innerFunc) { // 自定义存储过程 |
| | | param.func = btn.innerFunc |
| | | |
| | |
| | | loadingTotal: '', |
| | | disabled: false, |
| | | hidden: false, |
| | | checkParam: null, |
| | | autoMatic: false, |
| | | check: false |
| | | } |
| | |
| | | let param = { // 系统存储过程 |
| | | func: 'sPC_TableData_InUpDe' |
| | | } |
| | | let check_param = null |
| | | |
| | | if (this.props.BID) { |
| | | param.BID = this.props.BID |
| | |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | |
| | | if (/\$check@|@check\$/ig.test(param.LText)) { |
| | | check_param = fromJS(param).toJS() |
| | | check_param.LText = check_param.LText.replace(/\$check@/ig, '/*') |
| | | check_param.LText = check_param.LText.replace(/@check\$/ig, '*/') |
| | | check_param.LText = Utils.formatOptions(check_param.LText) |
| | | |
| | | if (btn.intertype === 'system') { |
| | | param.$unCheckParam = fromJS(param).toJS() |
| | | } |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | } |
| | | |
| | |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | |
| | | if (/\$check@|@check\$/ig.test(param.LText)) { |
| | | check_param = fromJS(param).toJS() |
| | | check_param.LText = check_param.LText.replace(/\$check@/ig, '/*') |
| | | check_param.LText = check_param.LText.replace(/@check\$/ig, '*/') |
| | | check_param.LText = Utils.formatOptions(check_param.LText) |
| | | |
| | | if (btn.intertype === 'system') { |
| | | param.$unCheckParam = fromJS(param).toJS() |
| | | } |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | } |
| | | |
| | |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | |
| | | if (/\$check@|@check\$/ig.test(param.LText)) { |
| | | check_param = fromJS(param).toJS() |
| | | check_param.LText = check_param.LText.replace(/\$check@/ig, '/*') |
| | | check_param.LText = check_param.LText.replace(/@check\$/ig, '*/') |
| | | check_param.LText = Utils.formatOptions(check_param.LText) |
| | | |
| | | if (btn.intertype === 'system') { |
| | | param.$unCheckParam = fromJS(param).toJS() |
| | | } |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | } |
| | | |
| | |
| | | |
| | | if (window.GLOB.mkHS) { // 函数 sPC_TableData_InUpDe 云端验证 |
| | | param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) |
| | | if (check_param) { |
| | | check_param.open_key = Utils.encryptOpenKey(check_param.secretkey, check_param.timestamp) |
| | | } |
| | | } |
| | | |
| | | param.menuname = btn.logLabel |
| | |
| | | param.s_debug_type = 'Y' |
| | | } |
| | | |
| | | if (check_param) { |
| | | check_param.menuname = btn.logLabel |
| | | this.setState({checkParam: check_param}) |
| | | } |
| | | |
| | | if (window.GLOB.breakpoint) { |
| | | param.func = 'sPC_TableData_InUpDe_debug' |
| | | } |
| | | |
| | | if (param.$unCheckParam) { |
| | | param.$unCheckParam.LText = param.$unCheckParam.LText.replace(/\$check@/ig, '/*').replace(/@check\$/ig, '*/') |
| | | param.$unCheckParam.LText = Utils.formatOptions(param.$unCheckParam.LText) |
| | | param.$unCheckParam.menuname = btn.logLabel |
| | | |
| | | if (window.GLOB.probation) { |
| | | param.$unCheckParam.s_debug_type = 'Y' |
| | | } |
| | | } |
| | | |
| | | _params.push(param) |
| | |
| | | } else { |
| | | param.LText = param.LText.replace(/@\$|\$@/ig, '') |
| | | } |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | |
| | | param.exec_type = 'y' // 后台解码 |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | |
| | | if (/\$check@|@check\$/ig.test(param.LText)) { |
| | | if (btn.intertype === 'system') { |
| | | param.$unCheckParam = fromJS(param).toJS() |
| | | } |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | } |
| | | |
| | | param.LText = Utils.formatOptions(param.LText) |
| | | } else if (btn.OpenType === 'pop') { // 表单 |
| | | if (index !== 0) { |
| | |
| | | } else { |
| | | param.LText = param.LText.replace(/@\$|\$@/ig, '') |
| | | } |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | |
| | | param.exec_type = 'y' // 后台解码 |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | |
| | | if (/\$check@|@check\$/ig.test(param.LText)) { |
| | | if (btn.intertype === 'system') { |
| | | param.$unCheckParam = fromJS(param).toJS() |
| | | } |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | } |
| | | |
| | | param.LText = Utils.formatOptions(param.LText) |
| | | } else { |
| | | param.ID = primaryId |
| | |
| | | } else { |
| | | param.LText = param.LText.replace(/@\$|\$@/ig, '') |
| | | } |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | |
| | | param.exec_type = 'y' // 后台解码 |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | |
| | | if (/\$check@|@check\$/ig.test(param.LText)) { |
| | | if (btn.intertype === 'system') { |
| | | param.$unCheckParam = fromJS(param).toJS() |
| | | } |
| | | param.LText = param.LText.replace(/\$check@|@check\$/ig, '') |
| | | } |
| | | |
| | | param.LText = Utils.formatOptions(param.LText) |
| | | } |
| | | } |
| | |
| | | |
| | | if (window.GLOB.breakpoint) { |
| | | param.func = 'sPC_TableData_InUpDe_debug' |
| | | } |
| | | |
| | | if (param.$unCheckParam) { |
| | | param.$unCheckParam.LText = param.$unCheckParam.LText.replace(/\$check@/ig, '/*').replace(/@check\$/ig, '*/') |
| | | param.$unCheckParam.LText = Utils.formatOptions(param.$unCheckParam.LText) |
| | | param.$unCheckParam.menuname = btn.logLabel |
| | | |
| | | if (window.GLOB.probation) { |
| | | param.$unCheckParam.s_debug_type = 'Y' |
| | | } |
| | | } |
| | | |
| | | return param |
| | |
| | | params = this.getInnerParam(data, formdata) |
| | | } |
| | | |
| | | if (params.length <= 20) { |
| | | if (params[0].$unCheckParam) { |
| | | this.checkLoopRequest(params, btn, _resolve) |
| | | } else if (params.length <= 20) { |
| | | let deffers = params.map((param, i) => { |
| | | return new Promise(resolve => { |
| | | setTimeout(() => { |
| | |
| | | } else { |
| | | this.innerLoopRequest(params, btn, _resolve) |
| | | } |
| | | } else { |
| | | this.execError(res) |
| | | _resolve() |
| | | } |
| | | }, () => { |
| | | this.updateStatus() |
| | | _resolve() |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 数据检验循环执行 |
| | | */ |
| | | checkLoopRequest = (params, btn, _resolve) => { |
| | | let param = params.shift() |
| | | let unCheckParam = param.$unCheckParam |
| | | |
| | | delete param.$unCheckParam |
| | | |
| | | this.setState({ |
| | | loadingNumber: params.length |
| | | }) |
| | | |
| | | Api.genericInterface(param).then(res => { |
| | | if (res.status) { |
| | | this.triggerNote(res) // 消息 |
| | | |
| | | if (params.length === 0) { |
| | | this.execSuccess(res) |
| | | _resolve() |
| | | } else { |
| | | this.checkLoopRequest(params, btn, _resolve) |
| | | } |
| | | } else if (res.ErrCode === 'C') { |
| | | const _this = this |
| | | confirm({ |
| | | title: '继续执行?', |
| | | content: res.message, |
| | | onOk() { |
| | | return new Promise(resolve => { |
| | | Api.genericInterface(unCheckParam).then(result => { |
| | | if (result.status) { |
| | | _this.triggerNote(result) // 消息 |
| | | |
| | | if (params.length === 0) { |
| | | _this.execSuccess(result) |
| | | _resolve() |
| | | } else { |
| | | _this.checkLoopRequest(params, btn, _resolve) |
| | | } |
| | | } else { |
| | | _this.execError(res) |
| | | _resolve() |
| | | } |
| | | resolve() |
| | | }) |
| | | }) |
| | | }, |
| | | onCancel() { |
| | | _this.execError(res) |
| | | _resolve() |
| | | } |
| | | }) |
| | | } else { |
| | | this.execError(res) |
| | | _resolve() |
| | |
| | | loadingNumber: '', |
| | | loadingTotal: '', |
| | | }) |
| | | |
| | | if (res.ErrCode === 'C') { |
| | | const _this = this |
| | | if (this.state.checkParam) { |
| | | let param = this.state.checkParam |
| | | confirm({ |
| | | title: res.message || res.ErrMesg, |
| | | content: '继续执行?', |
| | | onOk() { |
| | | return new Promise(resolve => { |
| | | Api.genericInterface(param).then((result) => { |
| | | if (result.status) { |
| | | _this.execSuccess(result) |
| | | } else { |
| | | _this.execError(result) |
| | | } |
| | | resolve() |
| | | }, () => { |
| | | _this.setState({ |
| | | visible: false |
| | | }) |
| | | resolve() |
| | | }) |
| | | }) |
| | | }, |
| | | onCancel() { |
| | | _this.setState({ |
| | | visible: false |
| | | }) |
| | | if (btn.execError !== 'never') { |
| | | MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn, '', this.state.selines) |
| | | } |
| | | } |
| | | }) |
| | | this.setState({checkParam: null}) |
| | | return |
| | | } else { |
| | | Modal.error({ |
| | | title: res.message || res.ErrMesg, |
| | | }) |
| | | } |
| | | } |
| | | |
| | | if (btnconfig && btnconfig.setting && btnconfig.setting.errFocus) { |
| | | MKEmitter.emit('mkFC', 'focus', btnconfig.setting.errFocus) |
| | |
| | | data: PropTypes.any, // 表格数据 |
| | | BID: PropTypes.any, // 主表ID |
| | | BData: PropTypes.any, // 主表数据 |
| | | unload: PropTypes.any, // 下拉菜单不加载数据 |
| | | inputSubmit: PropTypes.func // input回车提交 |
| | | } |
| | | |
| | |
| | | record = {} |
| | | |
| | | componentDidMount () { |
| | | const { action } = this.props |
| | | const { action, unload } = this.props |
| | | |
| | | let data = {} |
| | | let BData = {} |
| | |
| | | this.record = record |
| | | |
| | | this.setState({ formlist }, () => { |
| | | if (unload) return |
| | | |
| | | if (action.setting && action.setting.focus && fieldMap.has(action.setting.focus)) { |
| | | setTimeout(() => { |
| | | MKEmitter.emit('mkFC', 'focus', fieldMap.get(action.setting.focus).uuid) |
| | |
| | | } |
| | | |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.LText = param.LText.replace(/@\$|\$@/ig, '').replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id)@/ig, `'${param.timestamp}'`) |
| | | param.LText = param.LText.replace(/@\$|\$@/ig, '').replace(/\$check@|@check\$/ig, '').replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id)@/ig, `'${param.timestamp}'`) |
| | | param.LText = param.LText.replace(/\n/g, ' ') |
| | | |
| | | // 外联数据库替换 |
| | |
| | | let param = { |
| | | func: 's_debug_sql', |
| | | exec_type: 'y', |
| | | LText: this.props.initsql + values.sql |
| | | } |
| | | |
| | | param.LText = `${this.props.initsql} |
| | | /* 自定义验证 */ |
| | | select @tbid='', @ErrorCode='',@retmsg='' |
| | | select top 1 @tbid='X' from (${values.sql}) a |
| | | If @tbid = '' |
| | | Begin |
| | | select @ErrorCode='${values.errorCode}',@retmsg='${values.errmsg}' |
| | | goto aaa |
| | | end |
| | | aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg` |
| | | |
| | | if (window.GLOB.funcs && window.GLOB.funcs.length > 0) { |
| | | window.GLOB.funcs.forEach(item => { |
| | |
| | | |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.LText = param.LText.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id)@/ig, `'${param.timestamp}'`) |
| | | |
| | | console.info(`/* sql 验证 */\n${param.LText.replace(/\n\s{10}/ig, '\n')}`) |
| | | |
| | | param.LText = param.LText.replace(/\n/g, ' ') |
| | | |
| | | param.LText = Utils.formatOptions(param.LText) |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | |
| | |
| | | </Col> |
| | | <Col span={24} className="sql"> |
| | | <Form.Item label={ |
| | | <Tooltip placement="topLeft" overlayStyle={{width: '320px', maxWidth: '320px'}} title={<><div>{'调试替换符 /*$breakpoint_begin_xxxx@ 、@breakpoint_end_xxxx$*/,在控制台中输入 window.debug = \'xxxx\' 会启用对应的调试语句,快捷键 ctrl+c 或在控制台中输入 window.debug = false 关闭调试。注:调试时字符 $breakpoint_proc@ 将被替换。'}</div><div style={{height: '5px'}}></div><div>{'数据检查替换符 $check@ -> \'\'、 @check$ -> \'\',ErrorCode等于C时 $check@ -> /*、 @check$ -> */。注:1、需使用系统接口 2、行设置为“选择多行”时无效。'}</div></>}> |
| | | <Tooltip placement="topLeft" overlayStyle={{width: '320px', maxWidth: '320px'}} title={<><div>{'调试替换符 /*$breakpoint_begin_xxxx@ 、@breakpoint_end_xxxx$*/,在控制台中输入 window.debug = \'xxxx\' 会启用对应的调试语句,快捷键 ctrl+c 或在控制台中输入 window.debug = false 关闭调试。注:调试时字符 $breakpoint_proc@ 将被替换。'}</div><div style={{height: '5px'}}></div><div>{'数据检查替换符 $check@ -> \'\'、 @check$ -> \'\',ErrorCode等于C时会询问是否继续执行,确定时 $check@ -> /*、 @check$ -> */。注:1、需使用系统接口 2、行设置为“选择多行”时无效。'}</div></>}> |
| | | <QuestionCircleOutlined className="mk-form-tip" /> |
| | | sql |
| | | </Tooltip> |
| | |
| | | resolve(_fields) |
| | | } |
| | | }).then(_fields => { |
| | | let _usefulfields = ['UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode'] |
| | | let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@RoleID nvarchar(512)', '@mk_departmentcode nvarchar(512)', '@mk_organization nvarchar(512)', '@mk_user_type nvarchar(20)', '@mk_nation nvarchar(50)', '@mk_province nvarchar(50)', '@mk_city nvarchar(50)', '@mk_district nvarchar(50)', '@mk_address nvarchar(100)', '@ErrorCode nvarchar(50)', '@retmsg nvarchar(4000)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)', '@bid nvarchar(50)'] |
| | | let _usefulfields = ['UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode', 'tbid'] |
| | | let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@RoleID nvarchar(512)', '@mk_departmentcode nvarchar(512)', '@mk_organization nvarchar(512)', '@mk_user_type nvarchar(20)', '@mk_nation nvarchar(50)', '@mk_province nvarchar(50)', '@mk_city nvarchar(50)', '@mk_district nvarchar(50)', '@mk_address nvarchar(100)', '@ErrorCode nvarchar(50)', '@retmsg nvarchar(4000)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)', '@bid nvarchar(50)', '@tbid nvarchar(50)'] |
| | | let _select = ['@UserName=\'\'', '@FullName=\'\'', '@RoleID=\'\'', '@mk_departmentcode=\'\'', '@mk_organization=\'\'', '@mk_user_type=\'\'', '@mk_nation=\'\'', '@mk_province=\'\'', '@mk_city=\'\'', '@mk_district=\'\'', '@mk_address=\'\'', '@ErrorCode=\'\'', '@retmsg=\'\'', '@BillCode=\'\'', '@BVoucher=\'\'', '@FIBVoucherDate=\'\'', '@FiYear=\'\'', '@ModularDetailCode=\'\'', '@bid=\'\''] |
| | | let fieldArr = _usefulfields.map(_f => _f.toLowerCase()) |
| | | let hasBid = false |
| | |
| | | let hasColumn = false |
| | | if (columns && columns.length > 0) { |
| | | if (btnTab) { // 表单标签 |
| | | if (btnTab.Ot !== 'notRequired' && btnTab.Ot !== 'requiredOnce') { |
| | | hasColumn = true |
| | | } |
| | | } else if (card.Ot !== 'notRequired' && card.Ot !== 'requiredOnce') { |
| | | hasColumn = btnTab.Ot !== 'notRequired' |
| | | } else if (card.Ot !== 'notRequired') { |
| | | hasColumn = true |
| | | } |
| | | } |
| | |
| | | }) |
| | | } |
| | | component.cols = getColumns(component.cols) |
| | | component.statFields = [] |
| | | } |
| | | |
| | | if (component.wrap && component.wrap.datatype === 'static') { |
| | |
| | | .g2-tooltip { |
| | | display: none; |
| | | } |
| | | .mk-action-space { |
| | | display: none; |
| | | } |
| | | } |
| | | |
| | | .print-page { |
| | |
| | | } |
| | | |
| | | handleButton = (type) => { |
| | | const that = this |
| | | // 菜单编辑:添加,确定,取消 |
| | | let _menuchange = !is(fromJS(this.state.menulist), fromJS(this.props.menulist)) |
| | | |
| | | if (type === 'confirm' && _menuchange) { |
| | | let _this = this |
| | | let param = { |
| | | func: 'sPC_Menu_SortUpt', |
| | | LText: this.state.menulist.map((item, index) => { |
| | |
| | | onOk() { |
| | | return Api.getSystemConfig(param).then(res => { |
| | | if (res.status) { |
| | | _this.props.reload() |
| | | that.props.reload() |
| | | } else { |
| | | notification.warning({ |
| | | top: 92, |
| | |
| | | onCancel() {} |
| | | }) |
| | | } else if (type === 'cancel' && _menuchange) { |
| | | let _this = this |
| | | |
| | | confirm({ |
| | | title: '菜单顺序已调整,放弃保存吗?', |
| | | content: '', |
| | | onOk() { |
| | | _this.props.exitEdit() |
| | | that.props.exitEdit() |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | |
| | | import { setGLOBFuncs } from '@/utils/utils.js' |
| | | import Sidemenu from './sidemenu' |
| | | |
| | | import '@/assets/css/design.scss' |
| | | import './index.scss' |
| | | |
| | | const _locale = sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS |
| | |
| | | componentDidMount() { |
| | | window.debugger = false |
| | | window.GLOB.breakpoint = false |
| | | window.GLOB.designView = true |
| | | sessionStorage.removeItem('breakpoint') |
| | | setGLOBFuncs() |
| | | } |
| | |
| | | } |
| | | |
| | | handleSubBtn = (type) => { |
| | | const that = this |
| | | if (type === 'confirm') { // 保存调整后的顺序 |
| | | let param = { |
| | | func: 'sPC_Menu_SortUpt', |
| | |
| | | }) |
| | | } else if (type === 'close') { // 退出编辑 |
| | | if (this.state.change) { |
| | | let _this = this |
| | | |
| | | confirm({ |
| | | title: '菜单顺序已调整,放弃保存吗?', |
| | | content: '', |
| | | onOk() { |
| | | _this.props.exitEdit() |
| | | that.props.exitEdit() |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | |
| | | } |
| | | |
| | | handleSubBtn = (type) => { |
| | | const that = this |
| | | // 操作按钮:添加、解除冻结、确认及关闭 |
| | | if (type === 'confirm') { |
| | | let param = { |
| | |
| | | }) |
| | | } else if (type === 'close') { |
| | | if (this.state.change) { |
| | | let _this = this |
| | | |
| | | confirm({ |
| | | title: '菜单顺序已调整,放弃保存吗?', |
| | | content: '', |
| | | onOk() { |
| | | _this.props.exitEdit() |
| | | }, |
| | | onCancel() {} |
| | | that.props.exitEdit() |
| | | } |
| | | }) |
| | | } else { |
| | | this.props.exitEdit() |