| | |
| | | "safer-buffer": "2.1.2" |
| | | } |
| | | }, |
| | | "echarts": { |
| | | "version": "4.5.0", |
| | | "resolved": "https://registry.npmjs.org/echarts/-/echarts-4.5.0.tgz", |
| | | "integrity": "sha512-q9M0errodeX/786uPifro76x0elbrUQkbSHh235QzbkaASuvP9AQoMErhGBno4iC/yq6kFDLqgmm3XCPWQGLzA==", |
| | | "requires": { |
| | | "zrender": "4.1.2" |
| | | } |
| | | }, |
| | | "echarts-for-react": { |
| | | "version": "2.0.15-beta.1", |
| | | "resolved": "https://registry.npmjs.org/echarts-for-react/-/echarts-for-react-2.0.15-beta.1.tgz", |
| | | "integrity": "sha512-wR8XaI3j/4JvTidZrrJVfP/RqSggLRlzKOwcruytyLSA6AyE51T7mK+EucfwZ0NkX8H6tPFCHCvgJH1LyXjiIg==", |
| | | "requires": { |
| | | "fast-deep-equal": "2.0.1", |
| | | "size-sensor": "0.2.5" |
| | | } |
| | | }, |
| | | "ee-first": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", |
| | |
| | | "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", |
| | | "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==" |
| | | }, |
| | | "size-sensor": { |
| | | "version": "0.2.5", |
| | | "resolved": "https://registry.npmjs.org/size-sensor/-/size-sensor-0.2.5.tgz", |
| | | "integrity": "sha512-Rip8d6LmCHIBUY5iIS3nKln1X4bF8260oFI4suo6MX+vOV/aNpNWYKTyjamSJMbxP17qMlR0DmGXFEio3BYJUg==" |
| | | }, |
| | | "slash": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", |
| | |
| | | "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" |
| | | } |
| | | } |
| | | }, |
| | | "zrender": { |
| | | "version": "4.1.2", |
| | | "resolved": "https://registry.npmjs.org/zrender/-/zrender-4.1.2.tgz", |
| | | "integrity": "sha512-MJYEo1ZOVesjxYsfcGtPXnUREmh4ACMV08QZLGZ3S7D1xOd96iz3O6nf6pv5PHb5NSHkbizr7ChSIgtAGwncvA==" |
| | | } |
| | | } |
| | | } |
| | |
| | | "dotenv": "6.2.0", |
| | | "dotenv-expand": "4.2.0", |
| | | "dragact": "^0.2.12", |
| | | "echarts": "^4.5.0", |
| | | "echarts-for-react": "^2.0.15-beta.1", |
| | | "eslint": "^6.1.0", |
| | | "eslint-config-react-app": "^5.0.1", |
| | | "eslint-loader": "2.2.1", |
| | |
| | | height: 100%; |
| | | } |
| | | |
| | | html::-webkit-scrollbar { |
| | | width: 8px; |
| | | } |
| | | html::-webkit-scrollbar-thumb { |
| | | box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13); |
| | | background: rgba(0, 0, 0, 0.13); |
| | | } |
| | | html::-webkit-scrollbar-track { |
| | | box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); |
| | | border: 1px solid rgba(0, 0, 0, 0.07); |
| | | background: rgba(0, 0, 0, 0); |
| | | } |
| | | |
| | | input[type="button"], input[type="submit"], input[type="search"], input[type="reset"] { |
| | | -webkit-appearance: none; |
| | | } |
| | |
| | | document.getElementById('root').style.overflowY = 'unset' |
| | | } |
| | | |
| | | tabHandleConfig = () => { |
| | | |
| | | } |
| | | |
| | | handleSubConfig = (item, originMenu, config, type) => { |
| | | if (type === 'button') { |
| | | if (item.OpenType === 'pop') { |
| | |
| | | tabview: 'SubTable' |
| | | }) |
| | | } |
| | | } else if (type === 'tabButton') { |
| | | // item.pageParam = '' |
| | | // if (config && config.type === 'Modal') { |
| | | // item.pageParam = config |
| | | // } |
| | | |
| | | // this.setState({ |
| | | // editMenu: originMenu, |
| | | // editAction: item, |
| | | // tabview: 'Modal' |
| | | // }) |
| | | } |
| | | } |
| | | |
| | |
| | | {this.state.tabview === 'SubTable' && |
| | | <SubTable |
| | | config={this.state.editTab} |
| | | menu={this.state.editMenu} |
| | | handleConfig={this.handleConfig} |
| | | handleSubConfig={this.handleSubConfig} |
| | | /> |
| | |
| | | if (menu.MenuID === this.state.selectedTabId) { |
| | | tabs[0] && (tabs[0].selected = true) |
| | | } |
| | | console.log(tabs) |
| | | this.props.modifyTabview(tabs) |
| | | } |
| | | |
| | |
| | | |
| | | selectcomponent (view) { |
| | | // 根据tab页中菜单信息,选择所需的组件 |
| | | if (view.type === 'CommonTable') { |
| | | if (view.type === 'Home') { |
| | | return (<Comps.Home MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>) |
| | | } else if (view.type === 'CommonTable') { |
| | | return (<Comps.CommonTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>) |
| | | } else if (view.type === 'DataManage') { |
| | | return (<Comps.DataManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>) |
| | |
| | | } |
| | | } |
| | | |
| | | componentDidMount () { |
| | | let home = { |
| | | MenuID: '1576117946681plembmkk9akkv8sn0vtdfdsfaf', |
| | | MenuName: '首页', |
| | | MenuNo: 'MESOrderDetailMwe', |
| | | PageParam: {}, |
| | | id: 1, |
| | | selected: true, |
| | | src: '', |
| | | text: '首页', |
| | | type: 'Home' |
| | | } |
| | | this.props.modifyTabview([home]) |
| | | } |
| | | |
| | | UNSAFE_componentWillReceiveProps (nextProps) { |
| | | if (nextProps.tabviews && !is(fromJS(this.props.tabviews), fromJS(nextProps.tabviews))) { |
| | | // tab窗口页增加或删除 |
| | |
| | | // 查看新tab页需要组件是否加载 |
| | | let MenuIDs = this.props.tabviews.map(tab => {return tab.MenuID}) |
| | | let newtab = nextProps.tabviews.filter(tab => !MenuIDs.includes(tab.MenuID))[0] |
| | | if (!Comps.CommonTable && newtab.type === 'CommonTable') { |
| | | if (!Comps.Home && newtab.type === 'Home') { |
| | | Comps.Home = asyncComponent(() => import('@/tabviews/home')) |
| | | } else if (!Comps.CommonTable && newtab.type === 'CommonTable') { |
| | | Comps.CommonTable = asyncComponent(() => import('@/tabviews/commontable')) |
| | | } else if (!Comps.Iframe && newtab.type === 'iframe') { |
| | | Comps.Iframe = asyncComponent(() => import('@/tabviews/iframe')) |
| | |
| | | <span className="tab-name" onClick={() => {this.changeTab(view)}}> |
| | | {view.MenuName} |
| | | </span> |
| | | <Icon type="close" onClick={() => {this.handleTabview(view)}}/> |
| | | {view.type !== 'Home' ? <Icon type="close" onClick={() => {this.handleTabview(view)}}/> : null} |
| | | </span> |
| | | } |
| | | key={view.MenuID} |
| | |
| | | } |
| | | case Type.RESET_EDITSTATE: |
| | | // 重置编辑状态 |
| | | if (state.tabviews.length === 0 && !action.editState) { |
| | | state.tabviews = [{ |
| | | MenuID: '1576117946681plembmkk9akkv8sn0vtdfdsfaf', |
| | | MenuName: '首页', |
| | | MenuNo: 'MESOrderDetailMwe', |
| | | selected: true, |
| | | text: '首页', |
| | | type: 'Home' |
| | | }] |
| | | } |
| | | return { |
| | | ...state, |
| | | editState: action.editState, |
| | |
| | | default: |
| | | return state |
| | | } |
| | | } |
| | | } |
| | |
| | | orderType: 'asc', |
| | | search: '', |
| | | configMap: {}, |
| | | BID: '' |
| | | BIDs: '' |
| | | } |
| | | |
| | | /** |
| | |
| | | loading: true |
| | | }, () => { |
| | | this.improveSearch() |
| | | console.log(this.state.tabviews) |
| | | if (config.setting.onload !== 'false') { |
| | | this.loadmaindata() |
| | | } |
| | |
| | | this.refs.mainButton.actionTrigger(btn, record) |
| | | } |
| | | |
| | | handleTableId = (type, id) => { |
| | | const { BIDs } = this.state |
| | | |
| | | this.setState({ |
| | | BIDs: { |
| | | ...BIDs, |
| | | [type]: id |
| | | } |
| | | }) |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | | // 组件加载时,获取菜单数据 |
| | | this.loadconfig() |
| | |
| | | loading={this.state.loading} |
| | | refreshdata={this.refreshbytable} |
| | | buttonTrigger={this.buttonTrigger} |
| | | handleTableId={this.handleTableId} |
| | | /> |
| | | } |
| | | {setting && setting.onload !== 'false' && setting.tabshow !== 'vertical' && tabviews && tabviews.length > 0 && |
| | |
| | | {_tab.label} |
| | | </span> |
| | | } key={`${index}`}> |
| | | {_tab.type === 'SubTable' ? <SubTable SupMenuID={this.props.MenuID} MenuID={_tab.linkTab} BID={this.state.BID} /> : null} |
| | | {_tab.type === 'SubTable' ? <SubTable SupMenuID={this.props.MenuID} MenuID={_tab.linkTab} Tab={_tab} BIDs={this.state.BIDs} /> : null} |
| | | </TabPane> |
| | | ))} |
| | | </Tabs> |
| | |
| | | total: PropTypes.number, // 总数 |
| | | loading: PropTypes.bool, // 表格加载中 |
| | | refreshdata: PropTypes.func, // 表格中排序列、页码的变化时刷新 |
| | | buttonTrigger: PropTypes.func // 表格中按钮触发操作 |
| | | buttonTrigger: PropTypes.func, // 表格中按钮触发操作 |
| | | handleTableId: PropTypes.func // 数据切换 |
| | | } |
| | | |
| | | state = { |
| | |
| | | } |
| | | |
| | | onSelectChange = selectedRowKeys => { |
| | | let index = '' |
| | | if (selectedRowKeys.length > 0) { |
| | | index = selectedRowKeys[selectedRowKeys.length - 1] |
| | | } |
| | | |
| | | this.changedata(index) |
| | | |
| | | this.setState({ selectedRowKeys }) |
| | | } |
| | | |
| | | changeRow = (record, index) => { |
| | | // 点击整行,触发切换,判断是否可选,单选或多选,进行对应操作 |
| | | if (!this.props.setting.tableType) return |
| | | |
| | | |
| | | let newkeys = JSON.parse(JSON.stringify(this.state.selectedRowKeys)) |
| | | let _re = newkeys.includes(index) |
| | | |
| | |
| | | } else { |
| | | if (_re) { |
| | | newkeys = newkeys.filter(item => item !== index) |
| | | this.changedata('') |
| | | } else { |
| | | newkeys.push(index) |
| | | this.changedata(index) |
| | | } |
| | | |
| | | this.setState({ selectedRowKeys: newkeys }) |
| | |
| | | this.props.refreshdata(pagination, filters, sorter) |
| | | } |
| | | |
| | | changedata = (index) => { |
| | | const { data, setting } = this.props |
| | | let _id = '' |
| | | |
| | | if (data && data.length > 0 && index !== '') { |
| | | _id = data[index][setting.primaryKey] |
| | | } |
| | | |
| | | this.props.handleTableId('mainTable', _id) |
| | | } |
| | | |
| | | resetTable = () => { |
| | | this.setState({ |
| | | pageIndex: 1, |
New file |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import {connect} from 'react-redux' |
| | | import echarts from 'echarts/lib/echarts' |
| | | import 'echarts/lib/chart/bar' |
| | | import 'echarts/lib/chart/line' |
| | | import 'echarts/lib/component/tooltip' |
| | | import 'echarts/lib/component/title' |
| | | import 'echarts/lib/component/legend' |
| | | import 'echarts/lib/component/toolbox' |
| | | import 'echarts/lib/component/markPoint' |
| | | import 'echarts/lib/component/markLine' |
| | | import { Icon, Tabs, Slider } from 'antd' |
| | | // import {refreshTabView, modifyTabview} from '@/store/action' |
| | | // import Api from '@/api' |
| | | import './index.scss' |
| | | |
| | | const { TabPane } = Tabs |
| | | |
| | | class Home extends Component { |
| | | static propTpyes = { |
| | | MenuNo: PropTypes.string, // 菜单参数 |
| | | MenuID: PropTypes.string, // 菜单Id |
| | | param: PropTypes.object // 菜单参数 |
| | | } |
| | | |
| | | state = { |
| | | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | let myChart = echarts.init(document.getElementById('home')) |
| | | // 绘制图表 |
| | | myChart.setOption({ |
| | | color: ['#1890ff'], |
| | | tooltip : { |
| | | trigger: 'axis', |
| | | axisPointer : { // 坐标轴指示器,坐标轴触发有效 |
| | | type : '' // 默认为直线,可选为:'line' | 'shadow' |
| | | } |
| | | }, |
| | | grid: { |
| | | left: '3%', |
| | | right: '4%', |
| | | bottom: '3%', |
| | | containLabel: true |
| | | }, |
| | | xAxis : [ |
| | | { |
| | | type : 'category', |
| | | data : ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], |
| | | axisTick: { |
| | | alignWithLabel: true |
| | | } |
| | | } |
| | | ], |
| | | yAxis : [ |
| | | { |
| | | type : 'value', |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: '#d9d9d9', |
| | | type: 'dashed' |
| | | } |
| | | } |
| | | } |
| | | ], |
| | | series : [ |
| | | { |
| | | name:'销售额', |
| | | type:'bar', |
| | | barWidth: '30', |
| | | data:[30, 52, 200, 334, 390, 330, 220, 170, 220, 290, 350, 410, 440, 530] |
| | | } |
| | | ] |
| | | }) |
| | | } |
| | | |
| | | render() { |
| | | return ( |
| | | <div className="home-view"> |
| | | <div className="ant-row-flex"> |
| | | <div className="ant-col ant-col-sm-6"> |
| | | <div className="ant-card"> |
| | | <div className="ant-card-body"> |
| | | <div className="antd-chart-card"> |
| | | <div className="antd-chart-top"> |
| | | <div className="antd-meta-wrap"> |
| | | <div className="antd-meta"> |
| | | <span> |
| | | <span>总销售额</span> |
| | | </span> |
| | | <span className="antd-action"> |
| | | <Icon type="info-circle-o" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-total"> |
| | | <span>¥ 126,560</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="antd-chart-content"> |
| | | <div className="antd-content-fixed"> |
| | | <div className="antd-trend-item" style={{marginRight: '16px'}}> |
| | | <span> |
| | | <span>周同比</span> |
| | | <span className="antd-trend-text">12%</span> |
| | | </span> |
| | | <span className="antd-trend-up"> |
| | | <Icon type="caret-up" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-trend-item"> |
| | | <span> |
| | | <span>日同比</span> |
| | | <span className="antd-trend-text">11%</span> |
| | | </span> |
| | | <span className="antd-trend-down"> |
| | | <Icon type="caret-down" /> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="antd-chart-footer"> |
| | | <div className="antd-field"> |
| | | <span className="antd-label"> |
| | | <span>日销售额</span> |
| | | </span> |
| | | <span className="antd-number">¥12,423</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="ant-col ant-col-sm-6"> |
| | | <div className="ant-card"> |
| | | <div className="ant-card-body"> |
| | | <div className="antd-chart-card"> |
| | | <div className="antd-chart-top"> |
| | | <div className="antd-meta-wrap"> |
| | | <div className="antd-meta"> |
| | | <span> |
| | | <span>产量</span> |
| | | </span> |
| | | <span className="antd-action"> |
| | | <Icon type="info-circle-o" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-total"> |
| | | <span>8,560</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="antd-chart-content"> |
| | | <div className="antd-content-fixed orange"> |
| | | <Slider defaultValue={67} tipFormatter={null} /> |
| | | <div className="mask"></div> |
| | | </div> |
| | | </div> |
| | | <div className="antd-chart-footer"> |
| | | <div className="antd-field"> |
| | | <span className="antd-label"> |
| | | <span>日产量</span> |
| | | </span> |
| | | <span className="antd-number">1,423</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="ant-col ant-col-sm-6"> |
| | | <div className="ant-card"> |
| | | <div className="ant-card-body"> |
| | | <div className="antd-chart-card"> |
| | | <div className="antd-chart-top"> |
| | | <div className="antd-meta-wrap"> |
| | | <div className="antd-meta"> |
| | | <span> |
| | | <span>工单数</span> |
| | | </span> |
| | | <span className="antd-action"> |
| | | <Icon type="info-circle-o" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-total"> |
| | | <span>6,560</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="antd-chart-content"> |
| | | <div className="antd-content-fixed primary"> |
| | | <Slider defaultValue={77} tipFormatter={null} /> |
| | | <div className="mask"></div> |
| | | </div> |
| | | </div> |
| | | <div className="antd-chart-footer"> |
| | | <div className="antd-field"> |
| | | <span className="antd-label"> |
| | | <span>日工单数</span> |
| | | </span> |
| | | <span className="antd-number">120</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="ant-col ant-col-sm-6"> |
| | | <div className="ant-card"> |
| | | <div className="ant-card-body"> |
| | | <div className="antd-chart-card"> |
| | | <div className="antd-chart-top"> |
| | | <div className="antd-meta-wrap"> |
| | | <div className="antd-meta"> |
| | | <span> |
| | | <span>周转率</span> |
| | | </span> |
| | | <span className="antd-action"> |
| | | <Icon type="info-circle-o" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-total"> |
| | | <span>87%</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="antd-chart-content"> |
| | | <div className="antd-content-fixed"> |
| | | <Slider defaultValue={87} tipFormatter={null} /> |
| | | <div className="mask"></div> |
| | | </div> |
| | | </div> |
| | | <div className="antd-chart-footer"> |
| | | <div className="antd-trend-item" style={{marginRight: '16px'}}> |
| | | <span> |
| | | <span>周同比</span> |
| | | <span className="antd-trend-text">17%</span> |
| | | </span> |
| | | <span className="antd-trend-up"> |
| | | <Icon type="caret-up" /> |
| | | </span> |
| | | </div> |
| | | <div className="antd-trend-item"> |
| | | <span> |
| | | <span>日同比</span> |
| | | <span className="antd-trend-text">10%</span> |
| | | </span> |
| | | <span className="antd-trend-down"> |
| | | <Icon type="caret-down" /> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <Tabs defaultActiveKey="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> |
| | | <ul className="antd-ranking-list"> |
| | | <li> |
| | | <span className="antd-ranking-active">1</span> |
| | | <span className="antd-ranking-title">产品1</span> |
| | | <span>723,234</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-active">2</span> |
| | | <span className="antd-ranking-title">产品2</span> |
| | | <span>683,434</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-active">3</span> |
| | | <span className="antd-ranking-title">产品3</span> |
| | | <span>527,264</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">4</span> |
| | | <span className="antd-ranking-title">产品4</span> |
| | | <span>493,233</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">5</span> |
| | | <span className="antd-ranking-title">产品5</span> |
| | | <span>323,734</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">6</span> |
| | | <span className="antd-ranking-title">产品6</span> |
| | | <span>303,934</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">7</span> |
| | | <span className="antd-ranking-title">产品7</span> |
| | | <span>227,244</span> |
| | | </li> |
| | | <li> |
| | | <span className="antd-ranking-number">8</span> |
| | | <span className="antd-ranking-title">产品8</span> |
| | | <span>223,734</span> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </TabPane> |
| | | </Tabs> |
| | | </div> |
| | | ) |
| | | } |
| | | } |
| | | |
| | | const mapStateToProps = (state) => { |
| | | return { |
| | | // tabviews: state.tabviews |
| | | } |
| | | } |
| | | |
| | | const mapDispatchToProps = (dispatch) => { |
| | | return { |
| | | // refreshTabView: (refreshTab) => dispatch(refreshTabView(refreshTab)), |
| | | // modifyTabview: (tabviews) => dispatch(modifyTabview(tabviews)) |
| | | } |
| | | } |
| | | |
| | | export default connect(mapStateToProps, mapDispatchToProps)(Home) |
New file |
| | |
| | | .home-view { |
| | | position: relative; |
| | | width: 100%; |
| | | min-height: calc(100vh - 92px); |
| | | // min-height: 100vh; |
| | | background: #f0f2f5; |
| | | padding: 24px; |
| | | .ant-row-flex { |
| | | display: flex; |
| | | flex-flow: row wrap; |
| | | margin-left: -12px; |
| | | margin-right: -12px; |
| | | .ant-col { |
| | | padding-left: 12px; |
| | | padding-right: 12px; |
| | | margin-bottom: 24px; |
| | | .ant-card { |
| | | box-sizing: border-box; |
| | | margin: 0; |
| | | padding: 0; |
| | | color: rgba(0,0,0,.65); |
| | | font-size: 14px; |
| | | font-variant: tabular-nums; |
| | | line-height: 1.5; |
| | | list-style: none; |
| | | font-feature-settings: "tnum"; |
| | | position: relative; |
| | | background: #fff; |
| | | border-radius: 2px; |
| | | transition: all .3s; |
| | | .ant-card-body { |
| | | padding: 20px 24px 8px; |
| | | .antd-chart-card { |
| | | position: relative; |
| | | box-sizing: border-box; |
| | | .antd-chart-top { |
| | | position: relative; |
| | | width: 100%; |
| | | overflow: hidden; |
| | | box-sizing: border-box; |
| | | .antd-meta-wrap { |
| | | float: left; |
| | | box-sizing: border-box; |
| | | .antd-meta { |
| | | height: 22px; |
| | | color: rgba(0,0,0,.45); |
| | | font-size: 14px; |
| | | line-height: 22px; |
| | | .antd-action { |
| | | position: absolute; |
| | | top: 4px; |
| | | right: 0; |
| | | line-height: 1; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | .antd-total { |
| | | height: 38px; |
| | | margin-top: 4px; |
| | | margin-bottom: 0; |
| | | overflow: hidden; |
| | | color: rgba(0,0,0,.85); |
| | | font-size: 30px; |
| | | line-height: 38px; |
| | | white-space: nowrap; |
| | | text-overflow: ellipsis; |
| | | word-break: break-all; |
| | | } |
| | | } |
| | | } |
| | | .antd-chart-content { |
| | | position: relative; |
| | | height: 40px; |
| | | .antd-content-fixed { |
| | | position: absolute; |
| | | bottom: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | .antd-trend-item { |
| | | display: inline-block; |
| | | font-size: 14px; |
| | | line-height: 22px; |
| | | .antd-trend-text { |
| | | margin-left: 5px; |
| | | } |
| | | .antd-trend-up { |
| | | color: #f5222d; |
| | | } |
| | | .antd-trend-down { |
| | | top: -1px; |
| | | color: #52c41a; |
| | | } |
| | | } |
| | | .mask { |
| | | position: absolute; |
| | | top: 0px; |
| | | left: 0px; |
| | | right: 0px; |
| | | bottom: 0px; |
| | | z-index: 1; |
| | | } |
| | | } |
| | | .ant-slider { |
| | | margin: 14px 0px 10px; |
| | | } |
| | | .ant-slider-track { |
| | | height: 7px; |
| | | background-color: #13C2C2; |
| | | } |
| | | .ant-slider-handle { |
| | | border-color: #13C2C2; |
| | | } |
| | | .orange { |
| | | .ant-slider-track { |
| | | background-color: orange; |
| | | } |
| | | .ant-slider-handle { |
| | | border-color: lightsalmon; |
| | | } |
| | | } |
| | | .primary { |
| | | .ant-slider-track { |
| | | background-color: #1890ff; |
| | | } |
| | | .ant-slider-handle { |
| | | border-color: #91d5ff; |
| | | } |
| | | } |
| | | .ant-slider-rail { |
| | | height: 7px; |
| | | } |
| | | } |
| | | .antd-chart-footer { |
| | | margin-top: 8px; |
| | | padding-top: 9px; |
| | | border-top: 1px solid #e8e8e8; |
| | | .antd-label { |
| | | font-size: 14px; |
| | | line-height: 22px; |
| | | margin-right: 10px; |
| | | } |
| | | .antd-trend-item { |
| | | display: inline-block; |
| | | font-size: 14px; |
| | | line-height: 22px; |
| | | .antd-trend-text { |
| | | margin-left: 5px; |
| | | } |
| | | .antd-trend-up { |
| | | color: #f5222d; |
| | | } |
| | | .antd-trend-down { |
| | | top: -1px; |
| | | color: #52c41a; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .ant-tabs { |
| | | box-sizing: border-box; |
| | | margin: 0; |
| | | padding: 0; |
| | | color: rgba(0, 0, 0, 0.65); |
| | | font-size: 14px; |
| | | font-variant: tabular-nums; |
| | | line-height: 1.5; |
| | | list-style: none; |
| | | font-feature-settings: "tnum"; |
| | | position: relative; |
| | | background: #fff; |
| | | border-radius: 2px; |
| | | transition: all .3s; |
| | | .sale-trend { |
| | | height: 400px; |
| | | margin-bottom: 20px; |
| | | } |
| | | .antd-sales-rank { |
| | | padding: 35px 32px 32px 72px; |
| | | .antd-ranking-title { |
| | | font-size: 16px; |
| | | } |
| | | .antd-ranking-list { |
| | | margin: 20px 0 0; |
| | | padding: 0; |
| | | list-style: none; |
| | | li { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | zoom: 1; |
| | | .antd-ranking-active { |
| | | display: inline-block; |
| | | width: 20px; |
| | | height: 20px; |
| | | margin-top: 1.5px; |
| | | margin-right: 16px; |
| | | font-weight: 600; |
| | | font-size: 12px; |
| | | line-height: 20px; |
| | | text-align: center; |
| | | color: #fff; |
| | | background-color: #314659; |
| | | border-radius: 20px; |
| | | } |
| | | .antd-ranking-number { |
| | | display: inline-block; |
| | | width: 20px; |
| | | height: 20px; |
| | | margin-top: 1.5px; |
| | | margin-right: 16px; |
| | | font-weight: 600; |
| | | font-size: 14px; |
| | | line-height: 20px; |
| | | text-align: center; |
| | | } |
| | | .antd-ranking-title { |
| | | flex: 1 1; |
| | | margin-right: 8px; |
| | | overflow: hidden; |
| | | white-space: nowrap; |
| | | text-overflow: ellipsis; |
| | | color: rgba(0,0,0,.65); |
| | | font-size: 14px; |
| | | line-height: 22px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | export default class NormalTable extends Component { |
| | | static propTpyes = { |
| | | BID: PropTypes.string, // 上级数据ID |
| | | Tab: PropTypes.object, // 标签信息 |
| | | BIDs: PropTypes.string, // 上级数据ID |
| | | MenuID: PropTypes.string, // 菜单Id |
| | | SupMenuID: PropTypes.string // 上级菜单Id |
| | | } |
| | |
| | | columns: null, |
| | | arr_field: '', |
| | | setting: null, |
| | | data: null, |
| | | data: [], |
| | | total: 0, |
| | | loading: false, |
| | | pageIndex: 1, |
| | |
| | | orderType: 'asc', |
| | | search: '', |
| | | configMap: {} |
| | | } |
| | | |
| | | UNSAFE_componentWillReceiveProps(nextProps) { |
| | | if (this.props.Tab.supMenu && !is(fromJS(this.props.BIDs[this.props.Tab.supMenu]), fromJS(nextProps.BIDs[this.props.Tab.supMenu]))) { |
| | | this.loadmaindata() |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | // 页面配置解析错误时提示 |
| | | if (!config) { |
| | | // notification.warning({ |
| | | // top: 92, |
| | | // message: this.state.dict['main.page.settingerror'], |
| | | // duration: 10 |
| | | // }) |
| | | this.setState({ |
| | | loadingview: false, |
| | | viewlost: true |
| | | // lostmsg: this.state.dict['main.page.settingerror'] |
| | | }) |
| | | return |
| | | } |
| | |
| | | let param = { |
| | | func: 'sPC_Get_TableData', |
| | | obj_name: 'data', |
| | | arr_field: arr_field |
| | | arr_field: arr_field, |
| | | BID: this.props.BIDs[this.props.Tab.supMenu] || '' |
| | | } |
| | | |
| | | let orderBy = orderColumn ? (orderColumn + ' ' + orderType) : setting.order |
| | |
| | | <SubAction |
| | | ref="subButton" |
| | | MenuID={this.props.MenuID} |
| | | BID={this.props.BID} |
| | | BID={this.props.BIDs[this.props.Tab.supMenu] || ''} |
| | | setting={setting} |
| | | refreshdata={this.refreshbyaction} |
| | | gettableselected={this.gettableselected} |
| | |
| | | */ |
| | | UNSAFE_componentWillMount () { |
| | | const {menu, editAction} = this.props |
| | | |
| | | console.log(menu) |
| | | let _config = '' |
| | | |
| | | if (editAction.pageParam) { |
| | |
| | | class SubTableConfig extends Component { |
| | | static propTpyes = { |
| | | config: PropTypes.object, |
| | | menu: PropTypes.any, |
| | | handleConfig: PropTypes.func, |
| | | handleSubConfig: PropTypes.func, |
| | | supMenuList: PropTypes.array |
| | |
| | | */ |
| | | UNSAFE_componentWillMount () { |
| | | const { config } = this.props |
| | | console.log(config) |
| | | |
| | | let _config = null |
| | | |
| | | if (!config || config.create) { |
| | |
| | | }) |
| | | } |
| | | |
| | | changeTemplate = () => { |
| | | this.props.handleConfig('template') |
| | | } |
| | | // changeTemplate = () => { |
| | | // this.props.handleConfig('template') |
| | | // } |
| | | |
| | | /** |
| | | * @description 标签页保存 |
| | |
| | | duration: 2 |
| | | }) |
| | | if (this.state.closeVisible) { |
| | | this.props.handleConfig('') |
| | | let view = this.props.menu ? this.props.menu.type : '' |
| | | this.props.handleConfig(view) |
| | | } else { |
| | | this.setState({ |
| | | menuloading: false, |
| | |
| | | okText: this.state.dict['header.confirm'], |
| | | cancelText: this.state.dict['header.cancel'], |
| | | onOk() { |
| | | _this.props.handleConfig('') |
| | | let view = _this.props.menu ? _this.props.menu.type : '' |
| | | _this.props.handleConfig(view) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | |
| | | closeVisible: true |
| | | }) |
| | | } else { |
| | | this.props.handleConfig('') |
| | | let view = this.props.menu ? this.props.menu.type : '' |
| | | this.props.handleConfig(view) |
| | | } |
| | | }, () => { |
| | | this.setState({ |
| | |
| | | /** |
| | | * @description 设置可配置按钮 |
| | | */ |
| | | setSubConfig = (btn, type) => { |
| | | setSubConfig = (btn) => { |
| | | const { config, originConfig } = this.state |
| | | |
| | | let isAdd = false |
| | |
| | | message: '菜单配置已修改,请保存!', |
| | | duration: 10 |
| | | }) |
| | | } else if (type === 'button') { |
| | | } else { |
| | | this.setState({ |
| | | loading: true |
| | | }) |
| | |
| | | _LongParam = '' |
| | | } |
| | | } |
| | | this.props.handleSubConfig(btn, '', _LongParam, type) |
| | | this.props.handleSubConfig(btn, config, _LongParam, 'tabButton') |
| | | } else { |
| | | this.setState({ |
| | | loading: false |
| | |
| | | }) |
| | | } |
| | | }) |
| | | } else if (type === 'tab') { |
| | | this.props.handleSubConfig(btn, '', '', type) |
| | | // this.setState({ |
| | | // loading: true |
| | | // }) |
| | | // Api.getSystemConfig({ |
| | | // func: 'sPC_Get_LongParam', |
| | | // MenuID: btn.uuid |
| | | // }).then(res => { |
| | | // if (res.status) { |
| | | // this.setState({ |
| | | // loading: false |
| | | // }) |
| | | // let _LongParam = '' |
| | | // if (res.LongParam) { |
| | | // _LongParam = window.decodeURIComponent(window.atob(res.LongParam)) |
| | | // try { |
| | | // _LongParam = JSON.parse(_LongParam) |
| | | // } catch (e) { |
| | | // _LongParam = '' |
| | | // } |
| | | // } |
| | | // this.props.handleSubConfig(btn, '', _LongParam) |
| | | // } else { |
| | | // this.setState({ |
| | | // loading: false |
| | | // }) |
| | | // notification.warning({ |
| | | // top: 92, |
| | | // message: res.message, |
| | | // duration: 10 |
| | | // }) |
| | | // } |
| | | // }) |
| | | } |
| | | }, () => { |
| | | notification.warning({ |
| | |
| | | this.setState({ |
| | | showColumnName: !showColumnName |
| | | }) |
| | | } |
| | | |
| | | dontsave = () => { |
| | | let view = this.props.menu ? this.props.menu.type : '' |
| | | this.props.handleConfig(view) |
| | | } |
| | | |
| | | render () { |
| | |
| | | icon={item.icon} |
| | | style={{marginBottom: '10px'}} |
| | | className={'mk-btn mk-' + item.class} |
| | | onClick={() => this.setSubConfig(item, 'button')} |
| | | onClick={() => this.setSubConfig(item)} |
| | | >{item.label}</Button> |
| | | </div> |
| | | ) |
| | |
| | | <Card title={this.state.dict['header.menu.page.configurable']} 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> |
| | | {/* <Button type="primary" onClick={this.changeTemplate}>{this.state.dict['header.menu.template.change']}</Button> */} |
| | | <Button type="primary" onClick={this.submitConfig} loading={this.state.menuloading}>{this.state.dict['header.save']}</Button> |
| | | <Button onClick={this.cancelConfig}>{this.state.dict['header.return']}</Button> |
| | | </div> |
| | |
| | | onCancel={() => { this.setState({closeVisible: false}) }} |
| | | footer={[ |
| | | <Button key="save" className="mk-btn mk-green" loading={this.state.menucloseloading} onClick={this.submitConfig}>{this.state.dict['header.save']}</Button>, |
| | | <Button key="confirm" className="mk-btn mk-yellow" onClick={() => {this.props.handleConfig('')}}>{this.state.dict['header.notsave']}</Button>, |
| | | <Button key="confirm" className="mk-btn mk-yellow" onClick={this.dontsave}>{this.state.dict['header.notsave']}</Button>, |
| | | <Button key="cancel" onClick={() => { this.setState({closeVisible: false}) }}>{this.state.dict['header.cancel']}</Button> |
| | | ]} |
| | | destroyOnClose |
| | |
| | | */ |
| | | static encrypt (str, timestamp) { |
| | | let salt = 'mingke' // 盐值 |
| | | return md5(str + salt + timestamp) |
| | | let _str = str + salt + timestamp |
| | | if (_str.length > 8000) { |
| | | _str = _str.slice(_str.length - 8000) |
| | | } |
| | | return md5(_str) |
| | | } |
| | | |
| | | /** |