src/index.js
@@ -73,6 +73,8 @@ if (config.appkey === options.cakey) { window.GLOB.appkey = '' console.warn('单点系统appkey不可与云端相同') } else { window.GLOB.appkey = config.appkey } } else if (options.sysType === 'local') { // 业务系统 if (config.appkey === options.cakey) { src/store/options.js
@@ -4,4 +4,5 @@ caId: 'MjAyMDAxMTYxMjMzMzU1MDd$mkGQzkyMzI1Rjk4MDY0QUNGQjQ2Mg==', cakey: 'MjAyMDAxMTYxMjQwMDQ2NDM$mk2N0QzODE2MjExNUI0MTc4OTVDMQ==', cdomain: 'aHR0cDovL2Nsb3V$mkkLm1rOWguY24=' // window.btoa('') 域名 不带 / // cdomain: 'aHR0cDovL2Nsb3VkLnBv$mkc2l0ZWNncm91cC5jb206ODA4MA==' // bao—shi-de } src/tabviews/commontable/index.jsx
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types' import {connect} from 'react-redux' import { is, fromJS } from 'immutable' import { notification, Spin, Tabs, Icon, Switch, Modal, Button, message, Tree, Typography, Col } from 'antd' import { notification, Spin, Tabs, Icon, Switch, Modal, Button, message, Tree, Typography, Row, Col } from 'antd' import moment from 'moment' import Api from '@/api' @@ -1045,7 +1045,7 @@ refreshdata={this.refreshbysearch} /> : null } {setting && setting.onload !== 'false' ? <div className="chart-view"> {setting && setting.onload !== 'false' ? <Row className="chart-view" gutter={16}> {/* 视图组 */} {!config.expand ? <Tabs activeKey={chartId} onChange={this.changeChart}> {config.charts.map(item => ( @@ -1145,7 +1145,7 @@ ) } })} </div> : null } </Row> : null } {setting && setting.onload !== 'false' && config.tabgroups.map(group => ( <Tabs activeKey={tabActive[group.uuid]} key={group.uuid} onChange={(key) => this.setState({tabActive: {...tabActive, [group.uuid]: key}})}> src/tabviews/commontable/index.scss
@@ -53,14 +53,14 @@ position: relative; .main-pickup { position: absolute; right: 55px; right: 35px; top: -22px; z-index: 1; } .custom-control { position: absolute; z-index: 1; right: 20px; right: 0px; top: -23px; font-size: 18px; padding: 3px; @@ -94,6 +94,7 @@ } > .chart-view { position: relative; padding: 0 20px; >.ant-tabs { .ant-tabs-bar { position: relative; @@ -124,7 +125,7 @@ text-overflow: ellipsis; white-space: nowrap; overflow: hidden; margin: 0px 0px 0px 20px; margin: 0px; padding: 5px 10px; float: left; max-width: 50%; @@ -140,7 +141,7 @@ } .commontable.pick-control { .button-list { padding-right: 140px; padding-right: 110px; } } .menu-tree-modal { src/tabviews/commontable/secretKeyTable/actionList/index.jsx
@@ -335,7 +335,7 @@ render() { return ( <div className="button-list toolbar-button"> <div className="secret-button-list secret-toolbar-button"> {this.props.actions.map((item, index) => { return ( <Button src/tabviews/commontable/secretKeyTable/actionList/index.scss
@@ -1,6 +1,5 @@ .button-list.toolbar-button { .secret-button-list.secret-toolbar-button { position: relative; padding: 10px 20px 5px; background: #ffffff; button { min-width: 65px; src/tabviews/commontable/secretKeyTable/index.jsx
@@ -324,7 +324,7 @@ const { setting, actions, columns, pickup, config, selectedData } = this.state return ( <div className="subtable" id={'subtable' + this.props.MenuID}> <div className="secretKey-subtable" id={'subtable' + this.props.MenuID}> <div className="sub-action"> <SubAction setting={setting} src/tabviews/commontable/secretKeyTable/index.scss
@@ -1,4 +1,4 @@ .subtable { .secretKey-subtable { position: relative; min-height: 200px; src/tabviews/scriptmanage/actionList/index.jsx
@@ -297,7 +297,7 @@ render() { return ( <div className="button-list toolbar-button"> <div className="script-button-list script-toolbar-button"> {this.props.actions.map((item, index) => { return ( <Button src/tabviews/scriptmanage/actionList/index.scss
@@ -1,6 +1,6 @@ .button-list.toolbar-button { .script-button-list.script-toolbar-button { position: relative; padding: 10px 20px 5px; padding: 15px 20px 5px; background: #ffffff; button { min-width: 65px; src/tabviews/subtable/index.jsx
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types' import {connect} from 'react-redux' import { is, fromJS } from 'immutable' import { notification, Spin, Switch, Col, Icon, Tabs} from 'antd' import { notification, Spin, Switch, Row, Col, Icon, Tabs} from 'antd' import moment from 'moment' import Api from '@/api' @@ -810,7 +810,7 @@ refreshdata={this.refreshbysearch} /> : null } {config ? <div className="chart-view"> {config ? <Row className="chart-view" gutter={16}> {/* 视图组 */} {!config.expand ? <Tabs activeKey={chartId} onChange={this.changeChart}> {config.charts.map(item => ( @@ -901,7 +901,7 @@ ) } })} </div> : null } </Row> : null } {viewlost ? <NotFount msg={this.state.lostmsg} /> : null} </div> ) src/tabviews/subtable/index.scss
@@ -7,9 +7,6 @@ } .sub-action { min-height: 25px; .button-list { padding: 10px 0px 5px; } } > .chart-view { position: relative; src/tabviews/subtabtable/index.jsx
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types' import {connect} from 'react-redux' import { is, fromJS } from 'immutable' import { notification, Spin, Col, Icon, Tabs} from 'antd' import { notification, Spin, Col, Row, Icon, Tabs} from 'antd' import moment from 'moment' import Api from '@/api' @@ -642,7 +642,7 @@ refreshdata={this.refreshbysearch} /> : null } {config ? <div className="chart-view"> {config ? <Row className="chart-view" gutter={16}> {/* 视图组 */} {!config.expand ? <Tabs activeKey={chartId} onChange={this.changeChart}> {config.charts.map(item => ( @@ -721,7 +721,7 @@ ) } })} </div> : null } </Row> : null } {viewlost ? <NotFount msg={this.state.lostmsg} /> : null} </div> ) src/tabviews/subtabtable/index.scss
@@ -5,9 +5,6 @@ > .top-search { padding: 0 0px 10px; } .button-list.toolbar-button { padding: 10px 0px 5px; } .normal-data-table { padding: 0 0 30px; } src/tabviews/verupmanage/actionList/index.jsx
@@ -812,7 +812,7 @@ const { loadingUuid, loadingNumber } = this.state return ( <div className="button-list toolbar-button"> <div className="verup-button-list verup-toolbar-button"> {this.props.actions.map((item, index) => { let label = item.label if (loadingUuid === item.uuid && loadingNumber !== '') { src/tabviews/verupmanage/actionList/index.scss
@@ -1,4 +1,4 @@ .button-list.toolbar-button { .verup-button-list.verup-toolbar-button { position: relative; padding: 10px 20px 5px; background: #ffffff; src/tabviews/verupmanage/index.scss
@@ -56,6 +56,7 @@ } .main-table-box { position: relative; padding: 0 20px; .pickchange { position: absolute; right: 0px; src/tabviews/verupmanage/subtabtable/index.jsx
@@ -437,7 +437,7 @@ const { config, setting, searchlist, actions, columns, pickup, selectedData } = this.state return ( <div className="subtable" id={'subtable' + this.props.MenuID}> <div className="verup-subtable" id={'subtable' + this.props.MenuID}> {searchlist && searchlist.length > 0 ? <SubSearch dict={this.state.dict} src/tabviews/verupmanage/subtabtable/index.scss
@@ -1,4 +1,4 @@ .subtable { .verup-subtable { position: relative; min-height: 200px; @@ -7,7 +7,7 @@ } >.sub-action { min-height: 25px; .button-list { .verup-button-list { padding: 10px 0px 5px; } } src/tabviews/zshare/actionList/index.scss
@@ -1,6 +1,6 @@ .button-list.toolbar-button { position: relative; padding: 10px 20px 5px; padding: 15px 0px 5px; background: #ffffff; button { min-width: 65px; src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -826,9 +826,7 @@ } socket.send(JSON.stringify(request)) } else { printerList.forEach((cell, index) => { setTimeout(() => {socket.send(JSON.stringify(cell))}, 500 * index) }) this.syncMessageSend(printerList) this.execSuccess({ ErrCode: 'S', @@ -849,9 +847,7 @@ } socket.send(JSON.stringify(request)) } else { printerList.forEach((cell, index) => { setTimeout(() => {socket.send(JSON.stringify(cell))}, 500 * index) }) this.syncMessageSend(printerList) this.execSuccess({ ErrCode: 'S', @@ -881,12 +877,14 @@ } if (data && data.cmd === 'getPrinters' && data.status) { printerList.forEach((cell, index) => { printerList = printerList.map(cell => { if (cell.task.printer === 'lackprinter') { cell.task.printer = data.defaultPrinter } setTimeout(() => {socket.send(JSON.stringify(cell))}, 500 * index) return cell }) this.syncMessageSend(printerList) this.execSuccess({ ErrCode: 'S', @@ -913,6 +911,18 @@ }) } } syncMessageSend = (list) => { let param = list.shift() if (socket && param) { socket.send(JSON.stringify(param)) } if (list && list.length > 0) { setTimeout(() => {this.syncMessageSend(list)}, 3000) } } /** * @description 操作成功后处理 * 1、excel导出,成功后取消导出按钮加载中状态 src/tabviews/zshare/chartcomponent/index.jsx
@@ -7,8 +7,8 @@ import asyncComponent from './asyncButtonComponent' import Utils from '@/utils/utils.js' import zhCN from '@/locales/zh-CN/model.js' import enUS from '@/locales/en-US/model.js' import zhCN from '@/locales/zh-CN/main.js' import enUS from '@/locales/en-US/main.js' import './index.scss' const ExcelOutButton = asyncComponent(() => import('@/tabviews/zshare/actionList/exceloutbutton')) @@ -16,29 +16,35 @@ class LineChart extends Component { static propTpyes = { BID: PropTypes.any, Tab: PropTypes.any, plot: PropTypes.object, data: PropTypes.array, loading: PropTypes.bool, config: PropTypes.object, getexceloutparam: PropTypes.func BID: PropTypes.any, // 父级Id Tab: PropTypes.any, // 标签信息 plot: PropTypes.object, // 图标设置信息 data: PropTypes.array, // 图表传入数据 loading: PropTypes.bool, // 数据加载中 config: PropTypes.object, // 页面配置信息 getexceloutparam: PropTypes.func // 获取excel导出参数 } state = { dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, empty: true, actions: [], chartId: Utils.getuuid(), chartData: [], chartFields: [], selectFields: [] dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, // 字典 empty: true, // 图表数据为空 actions: [], // 图表绑定的按钮组 chartId: Utils.getuuid(), // 图表Id chartData: [], // 图表数据 chartFields: [], // 统计图表生成字段集 selectFields: [], // 统计图表选择字段 percentFields: [] // 设置为百分比的字段,tooltip时增加% } /** * @description 校验图表的按钮组,如果为统计图表,计算图表字段 */ componentDidMount () { const { plot, data, config } = this.props let _state = {} let actions = [] let percentFields = [] config.action.forEach(item => { if (!plot.actions || plot.actions.length === 0) return if (!(item.OpenType === 'excelOut' || (item.OpenType === 'excelIn' && item.Ot === 'notRequired'))) return @@ -54,15 +60,38 @@ _state.selectFields = result.selectFields _state.actions = actions let _column = config.columns.filter(col => plot.InfoValue === col.field)[0] if (_column && _column.format === 'percent') { percentFields.push(plot.InfoValue) _state.percentFields = percentFields } this.setState(_state, () => { this.viewrender() }) } else { this.setState({ actions }) this.viewrender() if (plot.chartType === 'line' || plot.chartType === 'bar') { try { plot.Yaxis.forEach(yaxis => { let _column = config.columns.filter(col => yaxis === col.field)[0] if (_column && _column.format === 'percent') { percentFields.push(_column.label) } }) } catch { console.warn('Incorrect percentage setting') } } this.setState({ actions, percentFields }, () => { this.viewrender() }) } } /** * @description 图表数据更新,刷新内容 */ UNSAFE_componentWillReceiveProps (nextProps) { const { plot } = this.props if (!is(fromJS(this.props.data), fromJS(nextProps.data))) { @@ -89,6 +118,12 @@ return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)) } /** * @description 图表数据预处理 * 1、通过显示列进行数据类型转换 * 2、重复数据:取平均值、累计、去重 * 3、柱状图数据补齐 */ getdata = () => { const { data, plot, config } = this.props let vFields = plot.Yaxis && typeof(plot.Yaxis) === 'string' ? [plot.Yaxis] : plot.Yaxis @@ -217,6 +252,9 @@ return _data } /** * @description 统计数据预处理,动态生成统计字段并进行数据转换 */ getStaticMsg = (data) => { const { plot, config } = this.props @@ -248,7 +286,7 @@ item.$uuid = item[plot.InfoType] + item[plot.Xaxis] if (typeof(item[plot.InfoValue]) !== 'number') { item[plot.InfoValue] = parseFloat(plot.InfoValue) item[plot.InfoValue] = parseFloat(item[plot.InfoValue]) if (isNaN(item[plot.InfoValue])) { item[plot.InfoValue] = 0 } @@ -285,7 +323,7 @@ item.$uuid = item[plot.InfoType] + item[plot.Xaxis] if (typeof(item[plot.InfoValue]) !== 'number') { item[plot.InfoValue] = parseFloat(plot.InfoValue) item[plot.InfoValue] = parseFloat(item[plot.InfoValue]) if (isNaN(item[plot.InfoValue])) { item[plot.InfoValue] = 0 } @@ -320,7 +358,7 @@ if (!_mdata.has(item.$uuid)) { if (typeof(item[plot.InfoValue]) !== 'number') { item[plot.InfoValue] = parseFloat(plot.InfoValue) item[plot.InfoValue] = parseFloat(item[plot.InfoValue]) if (isNaN(item[plot.InfoValue])) { item[plot.InfoValue] = 0 } @@ -350,6 +388,9 @@ return {data: _data, chartFields: _chartFields, selectFields: _selectFields} } /** * @description 获取统计图表展示数据,通过选择类型筛选 */ getStaticData = () => { const { plot } = this.props const { chartData, chartFields, selectFields } = this.state @@ -365,6 +406,9 @@ return _data } /** * @description 图表渲染分组 */ viewrender = () => { const { plot } = this.props @@ -377,8 +421,12 @@ } } /** * @description 折线图渲染 */ linerender = () => { const { plot, config } = this.props const { percentFields } = this.state let _data = [] let _valfield = 'value' @@ -489,6 +537,12 @@ .position(`${plot.Xaxis}*${_valfield}`) .color(_typefield) .shape(plot.shape || 'smooth') .tooltip(`${plot.Xaxis}*${_valfield}*${_typefield}`, (name, value, type) => { return { name: type, value: percentFields.includes(type) ? value + '%' : value } }) if (plot.label === 'true') { _chart.label(_valfield) @@ -506,8 +560,12 @@ chart.render() } /** * @description 自定义渲染 */ customrender = (data, transfield) => { const { plot } = this.props const { percentFields } = this.state let barfields = [] let fields = [] @@ -630,13 +688,19 @@ label: null }) } if (item.chartType === 'bar') { let _chart = chart .interval() .position(`${plot.Xaxis}*${item.name}`) .color(item.color) .shape(item.shape) .tooltip(`${item.name}`, (value) => { return { name: item.name, value: percentFields.includes(item.name) ? value + '%' : value } }) if (item.label === 'true') { _chart.label(item.name) @@ -647,6 +711,12 @@ .position(`${plot.Xaxis}*${item.name}`) .color(item.color) .shape(item.shape) .tooltip(`${item.name}`, (value) => { return { name: item.name, value: percentFields.includes(item.name) ? value + '%' : value } }) if (item.label === 'true') { _chart.label(item.name) @@ -666,8 +736,12 @@ chart.render() } /** * @description 柱状图渲染 */ barrender = () => { const { plot, config } = this.props const { percentFields } = this.state let _data = [] let _valfield = 'value' @@ -785,6 +859,12 @@ } ]) .shape(plot.shape || 'rect') .tooltip(`${plot.Xaxis}*${_valfield}*${_typefield}`, (name, value, type) => { return { name: type, value: percentFields.includes(type) ? value + '%' : value } }) if (plot.label === 'true') { _chart.label(_valfield) @@ -796,6 +876,12 @@ .color(_typefield) .adjust('stack') .shape(plot.shape || 'rect') .tooltip(`${plot.Xaxis}*${_valfield}*${_typefield}`, (name, value, type) => { return { name: type, value: percentFields.includes(type) ? value + '%' : value } }) if (plot.label === 'true') { _chart.label(_valfield) @@ -805,6 +891,9 @@ chart.render() } /** * @description 饼图渲染 */ pierender = () => { const { plot, config } = this.props @@ -953,6 +1042,9 @@ chart.render() } /** * @description 统计图表,统计类型切换 */ handleChange = (val) => { this.setState({selectFields: val}, () => { let _element = document.getElementById(this.state.chartId) src/tabviews/zshare/chartcomponent/index.scss
@@ -2,7 +2,7 @@ margin-bottom: 30px; .canvas-wrap { margin: 0 20px; margin: 0 0px; position: relative; border-top: 1px solid transparent; .chart-action { @@ -61,6 +61,8 @@ > .ant-select { width: 150px; float: right; position: relative; z-index: 1; .ant-select-selection { min-height: 24px; height: 28px; src/tabviews/zshare/normalTable/index.scss
@@ -1,5 +1,5 @@ .normal-data-table { padding: 0 20px 30px; padding: 0 0px 30px; table { max-width: 100%; width: 100%; src/templates/comtableconfig/index.jsx
@@ -1145,19 +1145,42 @@ }) } let charterr = '' config.charts.forEach(chart => { if (!charterr && ['line', 'bar', 'pie'].includes(chart.chartType) && !chart.Xaxis) { charterr = '图表' + (chart.title ? '《' + chart.title + '》' : '') + '坐标轴未设置,不可启用!' } }) let hasKey = false let chartcols = [] config.columns.forEach(col => { if (col.field) { chartcols.push(col.field) } if (config.setting.primaryKey === col.field) { hasKey = true } }) let chartError = '' config.charts && config.charts.forEach((chart, index) => { if (chartError) return if (chart.Hide === 'true') return if (!['line', 'bar', 'pie'].includes(chart.chartType)) return if (!chart.Xaxis) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段尚未设置,不可启用!` } else if (['line', 'bar'].includes(chart.chartType) && chart.datatype !== 'statistics' && (!chart.Yaxis || chart.Yaxis.length === 0)) { // query 查询数据 chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段尚未设置,不可启用!` } else if (['line', 'bar'].includes(chart.chartType) && chart.datatype === 'statistics' && (!chart.InfoType || !chart.InfoValue)) { // statistics 统计数据 chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段尚未设置,不可启用!` } else if (chart.chartType === 'pie' && !chart.Yaxis) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段尚未设置,不可启用!` } else if (!chartcols.includes(chart.Xaxis)) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段在显示列中不存在,不可启用!` } else if (chart.chartType === 'pie' && !chartcols.includes(chart.Yaxis)) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段在显示列中不存在,不可启用!` } else if (['line', 'bar'].includes(chart.chartType) && chart.datatype === 'statistics' && (!chartcols.includes(chart.InfoType) || !chartcols.includes(chart.InfoValue))) { // statistics 统计数据 chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段在显示列中不存在,不可启用!` } else if (['line', 'bar'].includes(chart.chartType) && chart.datatype !== 'statistics' && chart.Yaxis.filter(yaxis => !chartcols.includes(yaxis)).length > 0) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段在显示列中不存在,不可启用!` } }) if (config.setting.interType === 'inner' && !config.setting.innerFunc && config.setting.default !== 'false' && !config.setting.dataresource) { return '菜单尚未设置数据源,不可启用!' @@ -1167,8 +1190,8 @@ return '显示列中不存在主键字段,不可启用!' } else if (!tabinvalid) { return '菜单标签页设置错误(存在多行标签时,行标签不可为空)!' } else if (charterr) { return charterr } else if (chartError) { return chartError } else { return true } src/templates/sharecomponent/chartgroupcomponent/chartform/index.jsx
@@ -510,7 +510,7 @@ card: 'credit-card' } if (result.chartType === 'line' || result.chartType === 'bar' || result.chartType === 'line') { if (result.chartType === 'line' || result.chartType === 'bar' || result.chartType === 'pie') { if (selectlegend && this.props.card.modelId !== selectlegend.uuid) { result = {...result, ...selectlegend.options} } src/templates/subtableconfig/index.jsx
@@ -951,17 +951,39 @@ * @description 校验配置信息的合法性 */ verifyconfig = (config) => { let charterr = '' config.charts.forEach(chart => { if (!charterr && ['line', 'bar', 'pie'].includes(chart.chartType) && !chart.Xaxis) { charterr = '图表' + (chart.title ? '《' + chart.title + '》' : '') + '坐标轴未设置,不可启用!' let hasKey = false let chartcols = [] config.columns.forEach(col => { if (col.field) { chartcols.push(col.field) } if (config.setting.primaryKey === col.field) { hasKey = true } }) let hasKey = false config.columns.forEach(col => { if (config.setting.primaryKey === col.field) { hasKey = true let chartError = '' config.charts && config.charts.forEach((chart, index) => { if (chartError) return if (chart.Hide === 'true') return if (!['line', 'bar', 'pie'].includes(chart.chartType)) return if (!chart.Xaxis) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段尚未设置,不可启用!` } else if (['line', 'bar'].includes(chart.chartType) && chart.datatype !== 'statistics' && (!chart.Yaxis || chart.Yaxis.length === 0)) { // query 查询数据 chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段尚未设置,不可启用!` } else if (['line', 'bar'].includes(chart.chartType) && chart.datatype === 'statistics' && (!chart.InfoType || !chart.InfoValue)) { // statistics 统计数据 chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段尚未设置,不可启用!` } else if (chart.chartType === 'pie' && !chart.Yaxis) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段尚未设置,不可启用!` } else if (!chartcols.includes(chart.Xaxis)) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段在显示列中不存在,不可启用!` } else if (chart.chartType === 'pie' && !chartcols.includes(chart.Yaxis)) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段在显示列中不存在,不可启用!` } else if (['line', 'bar'].includes(chart.chartType) && chart.datatype === 'statistics' && (!chartcols.includes(chart.InfoType) || !chartcols.includes(chart.InfoValue))) { // statistics 统计数据 chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段在显示列中不存在,不可启用!` } else if (['line', 'bar'].includes(chart.chartType) && chart.datatype !== 'statistics' && chart.Yaxis.filter(yaxis => !chartcols.includes(yaxis)).length > 0) { chartError = `图表${chart.title ? '《' + chart.title + '》' : index + 1}坐标轴字段在显示列中不存在,不可启用!` } }) @@ -971,8 +993,8 @@ return '菜单尚未设置主键,不可启用!' } else if (!hasKey) { return '显示列中不存在主键字段,不可启用!' } else if (charterr) { return charterr } else if (chartError) { return chartError } else { return true } src/views/login/index.scss
@@ -42,6 +42,9 @@ border-radius: 0; text-align: center; font-size: 18px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .ant-tabs-tab.ant-tabs-tab-active { cursor: default; @@ -52,6 +55,7 @@ .ant-tabs-tab { text-align: left!important; padding-left: 1.6vw!important; line-height: 60px!important; } } .login-middle {