| | |
| | | loading: false, // 编辑菜单或使用已使用模板时,获取配置信息 |
| | | preview: null, // 图片预览url |
| | | pretemplate: null, // 预览模板 |
| | | btnParam: null, // 编辑按钮的配置信息 |
| | | sysTemplates: sysTemps // 系统模板 |
| | | } |
| | | |
| | |
| | | handleSubConfig = (item, originMenu, config, type) => { |
| | | if (type === 'button') { |
| | | if (item.OpenType === 'pop') { |
| | | item.pageParam = '' |
| | | let pageParam = '' |
| | | if (config && config.type === 'Modal') { |
| | | item.pageParam = config |
| | | pageParam = config |
| | | } |
| | | |
| | | this.setState({ |
| | | editMenu: originMenu, |
| | | editTab: '', |
| | | editAction: item, |
| | | btnParam: pageParam, |
| | | tabview: 'Modal' |
| | | }) |
| | | } |
| | |
| | | this.setState({ |
| | | editMenu: originMenu, |
| | | editTab: config, |
| | | editAction: '', |
| | | tabview: 'SubTable' |
| | | }) |
| | | } |
| | | } else if (type === 'tabButton') { |
| | | // item.pageParam = '' |
| | | // if (config && config.type === 'Modal') { |
| | | // item.pageParam = config |
| | | // } |
| | | let pageParam = '' |
| | | console.log(config) |
| | | if (config && config.type === 'Modal') { |
| | | pageParam = config |
| | | } |
| | | |
| | | // this.setState({ |
| | | // editMenu: originMenu, |
| | | // editAction: item, |
| | | // tabview: 'Modal' |
| | | // }) |
| | | this.setState({ |
| | | editTab: originMenu, |
| | | editAction: item, |
| | | btnParam: pageParam, |
| | | tabview: 'Modal' |
| | | }) |
| | | } |
| | | } |
| | | |
| | |
| | | {this.state.tabview === 'Modal' && |
| | | <ModalConfig |
| | | menu={this.state.editMenu} |
| | | editTab={this.state.editTab} |
| | | editAction={this.state.editAction} |
| | | btnParam={this.state.btnParam} |
| | | handleConfig={this.handleConfig} |
| | | /> |
| | | } |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { BackTop, notification, Spin, Tabs, Icon} from 'antd' |
| | | import { BackTop, notification, Spin, Tabs, Icon, Card, Switch} from 'antd' |
| | | import moment from 'moment' |
| | | import Api from '@/api' |
| | | import MainSearch from './mainSearch' |
| | |
| | | orderType: 'asc', |
| | | search: '', |
| | | configMap: {}, |
| | | BIDs: '' |
| | | BIDs: {}, |
| | | setsingle: false, |
| | | pickup: false, |
| | | isLinkMain: false |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | // 过滤工具栏按钮(未经过权限过滤) |
| | | let _actions = config.action.filter(item => item.position === 'toolbar') |
| | | let _tab = config.tabs.filter(tab => tab.supMenu === 'mainTable') |
| | | |
| | | this.setState({ |
| | | loadingview: false, |
| | |
| | | actions: _actions, |
| | | columns: _columns, |
| | | tabviews: config.tabs, |
| | | isLinkMain: _tab.length > 0, |
| | | arr_field: _arrField.join(','), |
| | | search: Utils.initMainSearch(config.search), // 搜索条件初始化(含有时间格式,需要转化) |
| | | loading: true |
| | | }, () => { |
| | | this.improveSearch() |
| | | console.log(this.state.tabviews) |
| | | |
| | | if (config.setting.onload !== 'false') { |
| | | this.loadmaindata() |
| | | } |
| | |
| | | |
| | | |
| | | async loadmaindata () { |
| | | const { setting } = this.state |
| | | const { setting, BIDs } = this.state |
| | | let param = '' |
| | | |
| | | if (setting.interType !== 'inner' || (setting.interType === 'inner' && setting.innerFunc)) { |
| | |
| | | return item |
| | | }), |
| | | total: result.total, |
| | | loading: false |
| | | loading: false, |
| | | BIDs: { |
| | | ...BIDs, |
| | | mainTable: '' |
| | | } |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | |
| | | orderColumn: '', |
| | | orderType: 'asc', |
| | | search: '', |
| | | configMap: {} |
| | | configMap: {}, |
| | | BIDs: {}, |
| | | setsingle: false, |
| | | pickup: false, |
| | | isLinkMain: false |
| | | }, () => { |
| | | this.loadconfig() |
| | | }) |
| | |
| | | }) |
| | | } |
| | | |
| | | checkChange = () => { |
| | | const { setsingle, BIDs } = this.state |
| | | |
| | | let _BIDs = JSON.parse(JSON.stringify(BIDs)) |
| | | _BIDs.mainTable = '' |
| | | |
| | | this.setState({ |
| | | setsingle: !setsingle, |
| | | pickup: false, |
| | | BIDs: _BIDs |
| | | }) |
| | | } |
| | | |
| | | pickupChange = () => { |
| | | const { pickup } = this.state |
| | | this.setState({ |
| | | pickup: !pickup |
| | | }) |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | | // 组件加载时,获取菜单数据 |
| | | this.loadconfig() |
| | |
| | | return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)) |
| | | } |
| | | |
| | | /** |
| | | * @description 组件销毁,清除state更新 |
| | | */ |
| | | componentWillUnmount () { |
| | | this.setState = (state, callback) => { |
| | | return |
| | | } |
| | | } |
| | | |
| | | render() { |
| | | const { setting, searchlist, actions, columns, loadingview, viewlost, tabviews } = this.state |
| | | const { setting, searchlist, actions, columns, loadingview, viewlost, tabviews, setsingle, pickup, isLinkMain } = this.state |
| | | |
| | | return ( |
| | | <div className="commontable" id={'commontable' + this.props.MenuID}> |
| | | {loadingview && <Spin size="large" />} |
| | | {searchlist && searchlist.length > 0 ? |
| | | <MainSearch |
| | | refreshdata={this.refreshbysearch} |
| | | searchlist={searchlist} |
| | | dict={this.state.dict} |
| | | searchlist={searchlist} |
| | | refreshdata={this.refreshbysearch} |
| | | /> : null |
| | | } |
| | | {actions && setting.onload !== 'false' && |
| | | {actions && setting.onload !== 'false' ? |
| | | <MainAction |
| | | ref="mainButton" |
| | | MenuID={this.props.MenuID} |
| | | setting={setting} |
| | | refreshdata={this.refreshbyaction} |
| | | gettableselected={this.gettableselected} |
| | | actions={actions} |
| | | dict={this.state.dict} |
| | | /> |
| | | } |
| | | {columns && setting.onload !== 'false' && |
| | | <MainTable |
| | | ref="mainTable" |
| | | dict={this.state.dict} |
| | | MenuID={this.props.MenuID} |
| | | setting={setting} |
| | | columns={columns} |
| | | data={this.state.data} |
| | | total={this.state.total} |
| | | loading={this.state.loading} |
| | | refreshdata={this.refreshbytable} |
| | | buttonTrigger={this.buttonTrigger} |
| | | handleTableId={this.handleTableId} |
| | | /> |
| | | refreshdata={this.refreshbyaction} |
| | | gettableselected={this.gettableselected} |
| | | /> : null |
| | | } |
| | | {columns && setting.onload !== 'false' ? |
| | | <div className="main-table-box"> |
| | | {isLinkMain && setting.tableType === 'checkbox' ? <Switch title="单选切换" checkedChildren="多" unCheckedChildren="单" defaultChecked={setsingle} onChange={this.checkChange} /> : null} |
| | | {isLinkMain && this.state.BIDs.mainTable && (setting.tableType === 'radio' || setsingle) ? <Switch title="收起" checkedChildren="关" unCheckedChildren="开" defaultChecked={pickup} onChange={this.pickupChange} /> : null} |
| | | <MainTable |
| | | ref="mainTable" |
| | | pickup={pickup} |
| | | setting={setting} |
| | | columns={columns} |
| | | setsingle={setsingle} |
| | | dict={this.state.dict} |
| | | data={this.state.data} |
| | | total={this.state.total} |
| | | MenuID={this.props.MenuID} |
| | | loading={this.state.loading} |
| | | refreshdata={this.refreshbytable} |
| | | buttonTrigger={this.buttonTrigger} |
| | | handleTableId={this.handleTableId} |
| | | /> |
| | | </div> : null |
| | | } |
| | | {setting && setting.onload !== 'false' && setting.tabshow !== 'vertical' && tabviews && tabviews.length > 0 && |
| | | <Tabs defaultActiveKey="0" tabPosition="top"> |
| | |
| | | })} |
| | | </Tabs> |
| | | } |
| | | {setting && setting.onload !== 'false' && setting.tabshow === 'vertical' && tabviews && tabviews.length > 0 && |
| | | tabviews.map((_tab, index) => { |
| | | return !_tab.supMenu || (_tab.supMenu && this.state.BIDs[_tab.supMenu]) ? |
| | | <Card bordered={false} title={ |
| | | <span> |
| | | {_tab.icon ? <Icon type={_tab.icon} /> : null} |
| | | {_tab.label} |
| | | </span> |
| | | } key={`${index}`}> |
| | | {_tab.type === 'SubTable' ? <SubTable SupMenuID={this.props.MenuID} MenuID={_tab.linkTab} Tab={_tab} BID={this.state.BIDs[_tab.supMenu] || ''} /> : null} |
| | | </Card> : null |
| | | }) |
| | | } |
| | | <BackTop> |
| | | <div className="ant-back-top"> |
| | | <div className="ant-back-top-content"> |
| | |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | > .ant-card { |
| | | margin: 0 20px 20px; |
| | | > .ant-card-head { |
| | | border: 0; |
| | | padding: 0; |
| | | min-height: 30px; |
| | | .ant-card-head-title { |
| | | padding: 10px 0 0; |
| | | span { |
| | | color: #1890ff; |
| | | display: inline-block; |
| | | padding: 0 10px; |
| | | font-size: 15px; |
| | | border-bottom: 1px solid #1890ff; |
| | | i { |
| | | margin-right: 10px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | > .ant-card-body { |
| | | padding: 0; |
| | | } |
| | | } |
| | | .main-table-box { |
| | | position: relative; |
| | | .ant-switch { |
| | | z-index: 1; |
| | | float: right; |
| | | margin-right: 20px; |
| | | margin-bottom: 5px; |
| | | } |
| | | } |
| | | } |
| | | .ant-back-top { |
| | | bottom: 30px; |
| | |
| | | }) |
| | | } |
| | | |
| | | if (btn.OpenType === 'excelOut') { |
| | | this.setState({ |
| | | loadingUuid: '' |
| | | }) |
| | | } |
| | | |
| | | this.refreshdata(btn, 'error') |
| | | } |
| | | |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | // import { is, fromJS } from 'immutable' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Table, message, Affix, Button } from 'antd' |
| | | import './index.scss' |
| | | |
| | |
| | | dict: PropTypes.object, // 字典项 |
| | | MenuID: PropTypes.string, // 菜单Id |
| | | setting: PropTypes.object, // 表格全局设置:tableType(表格是否可选、单选、多选)、columnfixed(列固定)、actionfixed(按钮固定) |
| | | pickup: PropTypes.any, // 数据收起 |
| | | setsingle: PropTypes.any, // 设置单选多选 |
| | | columns: PropTypes.array, // 表格列 |
| | | data: PropTypes.any, // 表格数据 |
| | | total: PropTypes.number, // 总数 |
| | |
| | | } |
| | | |
| | | state = { |
| | | selectedRowKeys: [], // 表格中选中行 |
| | | pageIndex: 1, // 初始页面索引 |
| | | pageSize: 10, // 每页数据条数 |
| | | columns: null // 显示列 |
| | | selectedRowKeys: [], // 表格中选中行 |
| | | pageIndex: 1, // 初始页面索引 |
| | | pageSize: 10, // 每页数据条数 |
| | | columns: null, // 显示列 |
| | | selectId: '', |
| | | isSingleSelect: false |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | |
| | | } |
| | | _columns.push(cell) |
| | | }) |
| | | // {item.FieldName === 'MenuNo' ? <Icon onClick={(e) => {this.copycontent(e, record[item.FieldName])}} type="copy"/> : ''} |
| | | |
| | | this.setState({columns: _columns}) |
| | | } |
| | | |
| | | UNSAFE_componentWillReceiveProps(nextProps) { |
| | | if (!is(fromJS(this.props.setsingle), fromJS(nextProps.setsingle))) { |
| | | this.setState({ |
| | | isSingleSelect: nextProps.setsingle, |
| | | selectedRowKeys: [], |
| | | selectId: '' |
| | | }) |
| | | } |
| | | } |
| | | |
| | | getContent = (item, record) => { |
| | |
| | | } |
| | | |
| | | onSelectChange = selectedRowKeys => { |
| | | if (this.props.pickup) return |
| | | |
| | | let index = '' |
| | | if (selectedRowKeys.length > 0) { |
| | | index = selectedRowKeys[selectedRowKeys.length - 1] |
| | |
| | | |
| | | changeRow = (record, index) => { |
| | | // 点击整行,触发切换,判断是否可选,单选或多选,进行对应操作 |
| | | if (!this.props.setting.tableType) return |
| | | if (!this.props.setting.tableType || this.props.pickup) return |
| | | |
| | | let newkeys = JSON.parse(JSON.stringify(this.state.selectedRowKeys)) |
| | | let _re = newkeys.includes(index) |
| | | |
| | | if (this.props.setting.tableType === 'radio') { |
| | | if (this.props.setting.tableType === 'radio' || this.state.isSingleSelect) { |
| | | this.changedata(index) |
| | | this.setState({ selectedRowKeys: [index] }) |
| | | } else { |
| | | if (_re) { |
| | |
| | | _id = data[index][setting.primaryKey] |
| | | } |
| | | |
| | | this.setState({ |
| | | selectId: _id |
| | | }) |
| | | |
| | | this.props.handleTableId('mainTable', _id) |
| | | } |
| | | |
| | | resetTable = () => { |
| | | this.setState({ |
| | | pageIndex: 1, |
| | | selectId: '', |
| | | selectedRowKeys: [] |
| | | }) |
| | | } |
| | | |
| | | render() { |
| | | let { selectedRowKeys } = this.state |
| | | const { setting, pickup } = this.props |
| | | let { selectedRowKeys, isSingleSelect, selectId } = this.state |
| | | |
| | | let rowSelection = null |
| | | if (this.props.setting.tableType) { |
| | | if (setting.tableType) { |
| | | rowSelection = { |
| | | selectedRowKeys, |
| | | type: this.props.setting.tableType === 'radio' ? 'radio' : 'checkbox', |
| | | type: (setting.tableType === 'radio' || isSingleSelect) ? 'radio' : 'checkbox', |
| | | onChange: this.onSelectChange |
| | | } |
| | | } |
| | | let offset = null |
| | | if (this.props.setting.columnfixed) { |
| | | if (setting.columnfixed) { |
| | | // 表格头部固定于顶部时,判断距顶部高度 |
| | | if (!this.props.setting.actionfixed) { |
| | | if (!setting.actionfixed) { |
| | | offset = 48 |
| | | } else { |
| | | let box = document.getElementById(this.props.MenuID + 'mainaction') |
| | |
| | | } |
| | | } |
| | | |
| | | let _data = this.props.data ? this.props.data : [] |
| | | if (selectId && pickup && isSingleSelect) { |
| | | _data = _data.filter(item => item[setting.primaryKey] === selectId) |
| | | } |
| | | |
| | | return ( |
| | | <div className="main-table"> |
| | | {this.props.setting.columnfixed && <Affix offsetTop={offset} className="fix-header"> |
| | | {setting.columnfixed && <Affix offsetTop={offset} className="fix-header"> |
| | | <Table |
| | | size="middle" |
| | | bordered={true} |
| | |
| | | bordered={true} |
| | | rowSelection={rowSelection} |
| | | columns={this.state.columns} |
| | | dataSource={this.props.data ? this.props.data : []} |
| | | dataSource={_data} |
| | | loading={this.props.loading} |
| | | scroll={{ x: '100%', y: false }} |
| | | onRow={(record, index) => { |
| | |
| | | ], |
| | | series : [ |
| | | { |
| | | name:'销售额', |
| | | name:'月维修数', |
| | | type:'bar', |
| | | barWidth: '30', |
| | | data:[30, 52, 200, 334, 390, 330, 220, 170, 220, 290, 350, 410, 440, 530] |
| | |
| | | <div className="antd-meta-wrap"> |
| | | <div className="antd-meta"> |
| | | <span> |
| | | <span>总销售额</span> |
| | | <span>维修总数</span> |
| | | </span> |
| | | <span className="antd-action"> |
| | | <Icon type="info-circle-o" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-total"> |
| | | <span>¥ 126,560</span> |
| | | <span>100</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div className="antd-trend-item" style={{marginRight: '16px'}}> |
| | | <span> |
| | | <span>周同比</span> |
| | | <span className="antd-trend-text">12%</span> |
| | | <span className="antd-trend-text">10%</span> |
| | | </span> |
| | | <span className="antd-trend-up"> |
| | | <Icon type="caret-up" /> |
| | |
| | | <div className="antd-trend-item"> |
| | | <span> |
| | | <span>日同比</span> |
| | | <span className="antd-trend-text">11%</span> |
| | | <span className="antd-trend-text">10%</span> |
| | | </span> |
| | | <span className="antd-trend-down"> |
| | | <Icon type="caret-down" /> |
| | |
| | | <div className="antd-chart-footer"> |
| | | <div className="antd-field"> |
| | | <span className="antd-label"> |
| | | <span>日销售额</span> |
| | | <span>维修总数</span> |
| | | </span> |
| | | <span className="antd-number">¥12,423</span> |
| | | <span className="antd-number">100</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div className="antd-meta-wrap"> |
| | | <div className="antd-meta"> |
| | | <span> |
| | | <span>产量</span> |
| | | <span>超时工单</span> |
| | | </span> |
| | | <span className="antd-action"> |
| | | <Icon type="info-circle-o" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-total"> |
| | | <span>8,560</span> |
| | | <span>100</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div className="antd-chart-footer"> |
| | | <div className="antd-field"> |
| | | <span className="antd-label"> |
| | | <span>日产量</span> |
| | | <span>超时工单</span> |
| | | </span> |
| | | <span className="antd-number">1,423</span> |
| | | <span className="antd-number">100</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div className="antd-meta-wrap"> |
| | | <div className="antd-meta"> |
| | | <span> |
| | | <span>工单数</span> |
| | | <span>关单</span> |
| | | </span> |
| | | <span className="antd-action"> |
| | | <Icon type="info-circle-o" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-total"> |
| | | <span>6,560</span> |
| | | <span>100</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div className="antd-chart-footer"> |
| | | <div className="antd-field"> |
| | | <span className="antd-label"> |
| | | <span>日工单数</span> |
| | | <span>关单</span> |
| | | </span> |
| | | <span className="antd-number">120</span> |
| | | <span className="antd-number">100</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div className="antd-meta-wrap"> |
| | | <div className="antd-meta"> |
| | | <span> |
| | | <span>周转率</span> |
| | | <span>原件邮寄</span> |
| | | </span> |
| | | <span className="antd-action"> |
| | | <Icon type="info-circle-o" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-total"> |
| | | <span>87%</span> |
| | | <span>100</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div className="antd-trend-item" style={{marginRight: '16px'}}> |
| | | <span> |
| | | <span>周同比</span> |
| | | <span className="antd-trend-text">17%</span> |
| | | <span className="antd-trend-text">10%</span> |
| | | </span> |
| | | <span className="antd-trend-up"> |
| | | <Icon type="caret-up" /> |
| | |
| | | </div> |
| | | </div> |
| | | <Tabs defaultActiveKey="1"> |
| | | <TabPane tab="销售额" key="1"> |
| | | <TabPane tab="维修总数" key="1"> |
| | | <div id="home" className="sale-trend ant-col ant-col-xs-16"></div> |
| | | <div className="ant-col ant-col-xs-8"> |
| | | <div className="antd-sales-rank"> |
| | | <h4 className="antd-ranking-title">销量排名</h4> |
| | | <h4 className="antd-ranking-title">产品排名</h4> |
| | | <ul className="antd-ranking-list"> |
| | | <li> |
| | | <span className="antd-ranking-active">1</span> |
| | | <span className="antd-ranking-title">产品1</span> |
| | | <span className="antd-ranking-title">KU699</span> |
| | | <span>723,234</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-active">2</span> |
| | | <span className="antd-ranking-title">产品2</span> |
| | | <span className="antd-ranking-title">KU110</span> |
| | | <span>683,434</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-active">3</span> |
| | | <span className="antd-ranking-title">产品3</span> |
| | | <span className="antd-ranking-title">KU110K</span> |
| | | <span>527,264</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">4</span> |
| | | <span className="antd-ranking-title">产品4</span> |
| | | <span className="antd-ranking-title">KU066.9</span> |
| | | <span>493,233</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">5</span> |
| | | <span className="antd-ranking-title">产品5</span> |
| | | <span className="antd-ranking-title">KU079</span> |
| | | <span>323,734</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">6</span> |
| | | <span className="antd-ranking-title">产品6</span> |
| | | <span className="antd-ranking-title">KU153</span> |
| | | <span>303,934</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">7</span> |
| | | <span className="antd-ranking-title">产品7</span> |
| | | <span className="antd-ranking-title">KU151</span> |
| | | <span>227,244</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">8</span> |
| | | <span className="antd-ranking-title">产品8</span> |
| | | <span className="antd-ranking-title">KU720</span> |
| | | <span>223,734</span> |
| | | </li> |
| | | </ul> |
| | |
| | | return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)) |
| | | } |
| | | |
| | | /** |
| | | * @description 组件销毁,清除state更新 |
| | | */ |
| | | componentWillUnmount () { |
| | | this.setState = (state, callback) => { |
| | | return |
| | | } |
| | | } |
| | | |
| | | render() { |
| | | const { setting, searchlist, actions, columns, loadingview, viewlost } = this.state |
| | | |
| | |
| | | {actions && |
| | | <SubAction |
| | | ref="subButton" |
| | | MenuID={this.props.MenuID} |
| | | MenuID={this.props.SupMenuID} |
| | | BID={this.props.BID} |
| | | setting={setting} |
| | | refreshdata={this.refreshbyaction} |
| | |
| | | title: res.message || res.ErrMesg |
| | | }) |
| | | } |
| | | |
| | | if (btn.OpenType === 'excelOut') { |
| | | this.setState({ |
| | | loadingUuid: '' |
| | | }) |
| | | } |
| | | |
| | | this.refreshdata(btn, 'error') |
| | | } |
| | |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 组件销毁,清除state更新 |
| | | */ |
| | | componentWillUnmount () { |
| | | this.setState = (state, callback) => { |
| | | return |
| | | } |
| | | } |
| | | |
| | | handleList = (type, list, card) => { |
| | | const { config } = this.state |
| | | |
| | |
| | | let tabParam = { // 添加菜单tab页 |
| | | func: 'sPC_sMenusTab_AddUpt', |
| | | LText: config.tabs.map((item, index) => { |
| | | return `select '${menu.MenuID}' as MenuID ,'${item.uuid}' as Tabid,'${item.label}' as TabName ,'${(index + 1) * 10}' as Sort` |
| | | return `select '${menu.MenuID}' as MenuID ,'${item.linkTab}' as Tabid,'${item.label}' as TabName ,'${(index + 1) * 10}' as Sort` |
| | | }) |
| | | } |
| | | |
| | | tabParam.LText = tabParam.LText.join(' union all ') |
| | | tabParam.LText = Utils.formatOptions(tabParam.LText) |
| | | tabParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' |
| | |
| | | * @description 保存或修改菜单按钮 |
| | | */ |
| | | submitAction = (btnParam, tabParam) => { |
| | | console.log(tabParam) |
| | | const { config } = this.state |
| | | new Promise(resolve => { |
| | | // 内部请求 |
| | |
| | | }).then(res => { |
| | | if (res === false) return res |
| | | |
| | | if (tabParam.LText) { |
| | | Api.getSystemConfig(tabParam).then(result => { |
| | | if (!result.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: result.message, |
| | | duration: 10 |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | if (btnParam.LText) { |
| | | return Api.getSystemConfig(btnParam) |
| | | } else { |
| | |
| | | this.setState({ |
| | | config: {...config, setting: res}, |
| | | settingVisible: false, |
| | | columnsloading: true |
| | | columnsloading: true, |
| | | tabloading: true |
| | | }, () => { |
| | | this.setState({ |
| | | columnsloading: false |
| | | columnsloading: false, |
| | | tabloading: false |
| | | }) |
| | | }) |
| | | }) |
| | |
| | | display: inline-block; |
| | | } |
| | | } |
| | | .ant-tabs-content { |
| | | .ant-tabs-tabpane img { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | > .anticon-setting { |
| | | position: absolute; |
| | |
| | | import { Tabs, Icon } from 'antd' |
| | | import Utils from '@/utils/utils.js' |
| | | import Card from './card' |
| | | import subtable from '@/assets/img/subtable.jpg' |
| | | import './index.scss' |
| | | |
| | | const { TabPane } = Tabs |
| | | const photo = { |
| | | SubTable: subtable |
| | | } |
| | | |
| | | const Container = ({list, type, setting, placeholder, handleList, handleMenu, deleteMenu }) => { |
| | | let target = null |
| | |
| | | <Icon className="edit close" type="close" onClick={() => del(card)} /> |
| | | </div> |
| | | } key={`${index}`}> |
| | | {card.description} |
| | | <img src={photo[card.type]} alt=""/> |
| | | </TabPane> |
| | | ))} |
| | | </Tabs> |
| | |
| | | class ComTableConfig extends Component { |
| | | static propTpyes = { |
| | | menu: PropTypes.any, |
| | | editTab: PropTypes.any, |
| | | btnParam: PropTypes.object, |
| | | editAction: PropTypes.object, |
| | | handleConfig: PropTypes.func |
| | | } |
| | | |
| | | state = { |
| | | menu: null, // 上级菜单,三级菜单或标签 |
| | | dict: CommonDict, // 字典 |
| | | config: null, // 页面配置,包括模板类型、模态框设置、添加表名、表单列表 |
| | | visible: false, // 表单编辑模态框,显示控制 |
| | |
| | | closeVisible: false, // 关闭模态框 |
| | | tables: [], // 可用表名 |
| | | selectedTables: [], // 已选表名 |
| | | originConfig: null, // 原始菜单 |
| | | originConfig: null, // 原始菜单 |
| | | groupVisible: false, // 全局配置模态框 |
| | | curgroup: null // 当前组,新建或编辑 |
| | | } |
| | |
| | | * 4、设置按钮基本信息 |
| | | */ |
| | | UNSAFE_componentWillMount () { |
| | | const {menu, editAction} = this.props |
| | | console.log(menu) |
| | | let _config = '' |
| | | const {menu, editAction, editTab, btnParam} = this.props |
| | | |
| | | if (editAction.pageParam) { |
| | | _config = editAction.pageParam |
| | | let _config = '' |
| | | let _menu = { |
| | | type: editTab ? editTab.Template : menu.type, |
| | | tables: editTab ? editTab.tables : menu.LongParam.tables, |
| | | MenuID: editTab ? editTab.uuid : menu.MenuID, |
| | | MenuNo: editTab ? editTab.tabNo : menu.MenuNo, |
| | | MenuName: editTab ? editTab.tabName : menu.MenuName |
| | | } |
| | | |
| | | if (btnParam) { |
| | | _config = btnParam |
| | | } else { |
| | | _config = JSON.parse(JSON.stringify((Source.baseConfig))) |
| | | } |
| | |
| | | _config.setting.title = editAction.label |
| | | } |
| | | |
| | | if (menu.LongParam.tables && menu.LongParam.tables.length > 0 && _config.tables.length === 0) { |
| | | // 主菜单已有选择的表名,模态框没有表名时,复制主菜单表名 |
| | | _config.tables = menu.LongParam.tables |
| | | } |
| | | // 主菜单已有选择的表名,模态框没有表名时,复制主菜单表名 |
| | | _config.tables = _config.tables.length === 0 ? _menu.tables : _config.tables |
| | | |
| | | this.setState({ |
| | | menu: _menu, |
| | | config: _config, |
| | | selectedTables: _config.tables || [], |
| | | originConfig: JSON.parse(JSON.stringify(_config)), |
| | |
| | | type: 'text', |
| | | key: 'supMenu', |
| | | label: this.state.dict['header.menu.supMenu'], |
| | | initVal: menu.MenuName, |
| | | initVal: _menu.MenuName, |
| | | required: true, |
| | | readonly: true |
| | | }, |
| | |
| | | tableColumns: _columns |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 组件销毁,清除state更新 |
| | | */ |
| | | componentWillUnmount () { |
| | | this.setState = (state, callback) => { |
| | | return |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | submitConfig = () => { |
| | | const { menu, editAction } = this.props |
| | | const { config } = this.state |
| | | const { editAction } = this.props |
| | | const { config, menu } = this.state |
| | | |
| | | if ((!config.groups[0] && !config.fields[0]) || (config.fields[0] && config.fields[0].origin)) { |
| | | notification.warning({ |
| | |
| | | } |
| | | |
| | | cancelConfig = () => { |
| | | const { menu } = this.props |
| | | const { config, originConfig } = this.state |
| | | const { menu, config, originConfig } = this.state |
| | | let _this = this |
| | | |
| | | let isOrigin = config.fields.filter(item => item.origin).length > 0 |
| | |
| | | } |
| | | |
| | | render () { |
| | | const { menu } = this.props |
| | | const { config } = this.state |
| | | const { menu, config } = this.state |
| | | |
| | | return ( |
| | | <div className="modal-form-board"> |
| | |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 组件销毁,清除state更新 |
| | | */ |
| | | componentWillUnmount () { |
| | | this.setState = (state, callback) => { |
| | | return |
| | | } |
| | | } |
| | | |
| | | handleList = (type, list, card) => { |
| | | const { config } = this.state |
| | | |
| | |
| | | <div className="tools"> |
| | | <Collapse accordion defaultActiveKey="0" bordered={false}> |
| | | {/* 基本信息 */} |
| | | <Panel header={this.state.dict['header.menu.basedata']} key="0" id="common-basedata"> |
| | | <Panel header={'标签基本信息'} key="0" id="common-basedata"> |
| | | {/* 菜单信息 */} |
| | | <MenuForm |
| | | dict={this.state.dict} |
| | |
| | | </Collapse> |
| | | </div> |
| | | <div className="setting"> |
| | | <Card title={this.state.dict['header.menu.page.configurable']} bordered={false} extra={ |
| | | <Card title={'标签(子表)页面配置'} bordered={false} extra={ |
| | | <div> |
| | | <Switch className="big" checkedChildren="启" unCheckedChildren="停" defaultChecked={this.state.config.enabled} onChange={this.onEnabledChange} /> |
| | | {/* <Button type="primary" onClick={this.changeTemplate}>{this.state.dict['header.menu.template.change']}</Button> */} |