修改标题、生成链接及交叉表优化

黄欣 4 years ago
parent 5a85a9af99
commit d17733bf83

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="shortcut icon" href="<%= BASE_URL %>favicon.ico">
<title>Ipsos VIA BIBoard</title>
<title>Ipsos BIboard</title>
</head>
<body style="height: 100%;">
<div id="link"></div>

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="shortcut icon" href="<%= BASE_URL %>favicon.ico">
<title>Ipsos VIA BIBoard</title>
<title>Ipsos BIboard</title>
</head>
<body style="height: 100%;">
<div id="nolic"></div>

@ -2,7 +2,7 @@
<div class="top-nav">
<div v-loading="!axiosFinished" class="log">
<router-link to="/">
<span>Ipsos VIA BIBoard</span>
<span>Ipsos BIboard</span>
</router-link>
<!-- <svg-icon v-if="!logoUrl && axiosFinished" icon-class="DataEase" custom-class="top-nav-logo-icon" />-->
<!-- <img v-if="logoUrl && axiosFinished" :src="logoUrl" width="140" alt="" style="padding-top: 10px;">-->

@ -2,7 +2,7 @@ module.exports = {
TokenKey: 'Authorization',
RefreshTokenKey: 'refreshauthorization',
LinkTokenKey: 'LINK-PWD-TOKEN',
title: 'Ipsos VIA BIBoard',
title: 'Ipsos BIboard',
/* for sso */
IdTokenKey: 'IdToken',
AccessTokenKey: 'AccessToken',

@ -1,6 +1,6 @@
{
"id": "2459092",
"name": "Ipsos VIA BIBoard",
"name": "Ipsos BIboard",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",

@ -11,7 +11,7 @@
:width-resize="true"
:header-row-style="table_header_class"
:row-style="getRowStyle"
:cell-style="getColumStyle"
:merge-cells="mergeCells"
class="table-class"
show-overflow="tooltip"
show-header-overflow="tooltip"
@ -21,14 +21,22 @@
>
<ux-table-column
v-for="(field, index) in fields"
:key="index"
:min-width="field.rowName?200:100"
:field="field.dataeaseName"
:key="field.dataeaseName+index"
:field="field.subFields?'':field.dataeaseName"
:resizable="true"
:sortable="!field.rowName"
:fixed="field.fixed"
:title="field.rowName?field.name+' \\ '+field.rowName:field.name"
:title="field.name"
>
<template v-if="field.subFields">
<ux-table-column
v-for="(subfield) in field.subFields"
:key="subfield.dataeaseName"
:field="subfield.dataeaseName"
:resizable="true"
:title="subfield.name"
/>
</template>
</ux-table-column>
</ux-grid>
<el-row v-show="chart.type === 'table-info'" class="table-page">
@ -82,6 +90,7 @@ export default {
return {
fields: [],
height: 'auto',
mergeCells: [],
title_class: {
margin: '0 0',
width: '100%',
@ -113,6 +122,8 @@ export default {
background: '#ffffff',
height: '36px'
},
cellDimension: 0,
tableLength: 0,
title_show: true,
borderRadius: '0px',
currentPage: {
@ -130,13 +141,9 @@ export default {
}
}
},
watch: {
chart: function() {
this.init()
}
},
mounted() {
created() {
this.init()
console.log('init')
//
eventBus.$on('resizing', (componentId) => {
this.chartResize()
@ -159,6 +166,26 @@ export default {
}
}
},
deteleObject(obj) {
var uniques = []
var stringify = {}
for (var i = 0; i < obj.length; i++) {
var keys = Object.keys(obj[i])
keys.sort(function(a, b) {
return (Number(a) - Number(b))
})
var str = ''
for (var j = 0; j < keys.length; j++) {
str += JSON.stringify(keys[j])
str += JSON.stringify(obj[i][keys[j]])
}
if (!stringify.hasOwnProperty(str)) {
uniques.push(obj[i])
stringify[str] = true
}
}
return uniques
},
initData() {
const that = this
let datas = []
@ -167,7 +194,6 @@ export default {
datas = JSON.parse(JSON.stringify(this.chart.data.tableRow))
const findRowIndex = this.fields.findIndex(e => e.chartType === 'row')
const findValueIndex = this.fields.findIndex(e => e.chartType === 'bar')
const findIndex = this.fields.findIndex(e => e.chartType === null)
if (this.chart.type === 'table-info') {
//
this.currentPage.show = datas.length
@ -176,47 +202,142 @@ export default {
datas = datas.slice(pageStart, pageEnd)
} else if (this.chart.type === 'table-normal' && findRowIndex >= 0) {
//
this.fields[0].rowName = this.fields[findRowIndex].name
this.fields[0].fixed = 'left'
const fieldRowName = this.fields[findRowIndex].dataeaseName
const xaxis = this.chart.xaxis ? JSON.parse(this.chart.xaxis) : []
const yaxisExt = this.chart.yaxisExt ? JSON.parse(this.chart.yaxisExt) : []
const xaxisFieldId = xaxis.map(e => e.dataeaseName)
const yaxisExtFieldId = yaxisExt.map(e => e.dataeaseName)
const fieldValueName = this.fields[findValueIndex].dataeaseName
const fieldName = this.fields[findIndex].dataeaseName
const fields = [this.fields[0]]
let name = null
let flag = true
this.cellDimension = xaxisFieldId.length
let fields = this.fields.filter(e => xaxisFieldId.includes(e.dataeaseName))
console.log(fields)
let rowSum = 0
const columnValue = []
datas.forEach((ele, index) => {
if (name !== ele[fieldName] && name !== null) {
flag = false
let columnValue = []
let rowName = []
yaxisExtFieldId.forEach((e, index) => {
const arr = []
datas.forEach(ele => {
if (index > 0) {
arr.push({
dataeaseName: e + ele[e] + ',' + yaxisExtFieldId[0] + ele[yaxisExtFieldId[0]],
name: ele[e]
})
} else {
rowName.push({
dataeaseName: e + ele[e],
name: ele[e]
})
}
if (name !== ele[fieldName]) {
columnValue.push({
[fieldName]: ele[fieldName]
})
if (index > 0) {
const copyArr = this.deteleObject(arr)
rowName.forEach(item => {
const newArr = []
copyArr.forEach(sube => {
if (item.dataeaseName === sube.dataeaseName.split(',')[1]) {
newArr.push(sube)
}
name = ele[fieldName]
if (name === ele[fieldName] && flag) {
fields.push({
dataeaseName: fieldRowName + ele[fieldRowName],
name: ele[fieldRowName]
})
item.subFields = newArr
})
} else {
rowName = this.deteleObject(rowName)
}
})
if (xaxisFieldId.length > 1) {
let arr1 = []
let arr2 = []
datas.forEach(obj => {
for (const key in obj) {
if (Object.hasOwnProperty.call(obj, key)) {
const element = obj[key]
if (xaxisFieldId[0] === key) {
arr1.push({
[key]: element
})
} else if (xaxisFieldId[1] === key) {
arr2.push({
[key]: element
})
}
}
}
})
arr1 = this.deteleObject(arr1)
arr2 = this.deteleObject(arr2)
let rowIndex = 0
arr1.forEach(e => {
this.mergeCells.push({
col: 0,
row: rowIndex,
rowspan: arr2.length,
colspan: 1
})
arr2.forEach(item => {
const obj = {}
columnValue.push(Object.assign(obj, e, item))
rowIndex += 1
})
})
columnValue.forEach(ele => {
if (yaxisExtFieldId.length > 1) {
datas.forEach(subEle => {
if (ele[xaxisFieldId[0]] === subEle[xaxisFieldId[0]] && ele[xaxisFieldId[1]] === subEle[xaxisFieldId[1]]) {
const key = yaxisExtFieldId[1] + subEle[yaxisExtFieldId[1]] + ',' + yaxisExtFieldId[0] + subEle[yaxisExtFieldId[0]]
ele[key] = subEle[fieldValueName]
rowSum += subEle[fieldValueName]
}
})
} else {
datas.forEach(subEle => {
if (ele[xaxisFieldId[0]] === subEle[xaxisFieldId[0]] && ele[xaxisFieldId[1]] === subEle[xaxisFieldId[1]]) {
const key = yaxisExtFieldId[0] + subEle[yaxisExtFieldId[0]]
ele[key] = subEle[fieldValueName]
rowSum += subEle[fieldValueName]
}
})
}
ele.rowTotal = rowSum
rowSum = 0
})
} else {
datas.forEach(obj => {
for (const key in obj) {
if (Object.hasOwnProperty.call(obj, key)) {
const element = obj[key]
if (xaxisFieldId.includes(key)) {
columnValue.push({
[key]: element
})
}
}
}
})
columnValue = this.deteleObject(columnValue)
columnValue.forEach(ele => {
if (yaxisExtFieldId.length > 1) {
datas.forEach(subEle => {
if (ele[fieldName] === subEle[fieldName]) {
const key = fieldRowName + subEle[fieldRowName]
if (ele[xaxisFieldId[0]] === subEle[xaxisFieldId[0]]) {
const key = yaxisExtFieldId[1] + subEle[yaxisExtFieldId[1]] + ',' + yaxisExtFieldId[0] + subEle[yaxisExtFieldId[0]]
ele[key] = subEle[fieldValueName]
rowSum += subEle[fieldValueName]
}
})
} else {
datas.forEach(subEle => {
if (ele[xaxisFieldId[0]] === subEle[xaxisFieldId[0]]) {
const key = yaxisExtFieldId[0] + subEle[yaxisExtFieldId[0]]
ele[key] = subEle[fieldValueName]
rowSum += subEle[fieldValueName]
}
})
}
ele.rowTotal = rowSum
rowSum = 0
})
}
fields = fields.concat(rowName)
fields.push({
dataeaseName: 'rowTotal',
fixed: 'right',
name: `合计(${this.fields[findValueIndex].name})`
})
datas = columnValue
@ -229,6 +350,7 @@ export default {
datas = []
this.resetPage()
}
this.tableLength = datas.length
this.$refs.plxTable.reloadData(datas)
this.$nextTick(() => {
this.initStyle()
@ -251,7 +373,7 @@ export default {
if (this.chart.type === 'table-info') {
tableHeight = (this.currentPage.pageSize + 2) * 36 - pageHeight
} else {
tableHeight = (this.chart.data.tableRow.length + 2) * 36 - pageHeight
tableHeight = (this.tableLength + 2) * 36 - pageHeight
}
} else {
tableHeight = 0
@ -333,8 +455,7 @@ export default {
}
},
getColumStyle({ columnIndex }) {
const findRowIndex = this.fields.findIndex(e => e.rowName)
if (this.chart.type === 'table-normal' && findRowIndex >= 0 && (columnIndex === 0 || columnIndex === this.fields.length - 1)) {
if (this.chart.type === 'table-normal' && this.cellDimension > 0 && (columnIndex < this.cellDimension || columnIndex === this.fields.length - 1)) {
return this.table_header_class
} else {
return ''
@ -343,17 +464,16 @@ export default {
summaryMethod({ columns, data }) {
const that = this
const means = [] //
const findRowIndex = this.fields.findIndex(e => e.rowName)
const findValueIndex = this.chart.data.fields.findIndex(e => e.chartType === 'bar')
columns.forEach((column, columnIndex) => {
if (columnIndex === 0) {
if (findRowIndex !== -1 && findValueIndex !== -1) {
if (this.cellDimension > 0 && findValueIndex !== -1) {
means.push(`合计(${this.chart.data.fields[findValueIndex].name})`)
} else {
means.push('合计')
}
} else {
if (columnIndex >= that.chart.data.fields.length - that.chart.data.series.length || findRowIndex !== -1) {
if (columnIndex >= that.chart.data.fields.length - that.chart.data.series.length || this.cellDimension > 0) {
const values = data.map(item => Number(item[column.property]))
//
if (!values.every(value => isNaN(value))) {

@ -536,7 +536,7 @@
<div ref="imageWrapper" style="height: 100%">
<chart-component v-if="httpRequest.status && chart.type && !chart.type.includes('table') && !chart.type.includes('text') && renderComponent() === 'echarts'" ref="dynamicChart" :chart-id="chart.id" :chart="chart" class="chart-class" @onChartClick="chartClick" />
<chart-component-g2 v-if="httpRequest.status && chart.type && !chart.type.includes('table') && !chart.type.includes('text') && renderComponent() === 'g2'" ref="dynamicChart" :chart-id="chart.id" :chart="chart" class="chart-class" />
<table-normal v-if="httpRequest.status && chart.type && chart.type.includes('table')" :show-summary="chart.type === 'table-normal'" :chart="chart" class="table-class" />
<table-normal v-if="httpRequest.status && chart.type && chart.type.includes('table')" :key="chart.type === 'table-normal'?new Date().getTime():null" :show-summary="chart.type === 'table-normal'" :chart="chart" class="table-class" />
<label-normal v-if="httpRequest.status && chart.type && chart.type.includes('text')" :chart="chart" class="table-class" />
<div v-if="!httpRequest.status" class="chart-error-class">
<div style="font-size: 12px; color: #9ea6b2;height: 100%;display: flex;align-items: center;justify-content: center;">
@ -1440,9 +1440,12 @@ export default {
}
},
addXaxis(e) {
if ((this.view.type === 'map' && this.view.xaxis.length > 1) || (this.view.type === 'table-normal' && this.view.xaxis.length > 1 && this.view.yaxisExt.length > 0)) {
if ((this.view.type === 'map' && this.view.xaxis.length > 1)) {
this.view.xaxis = [this.view.xaxis[0]]
}
if (this.view.type === 'table-normal' && this.view.xaxis.length > 2 && this.view.yaxisExt.length > 0) {
this.view.xaxis = [this.view.xaxis[0], this.view.xaxis[1]]
}
if (this.view.type !== 'table-info') {
this.dragCheckType(this.view.xaxis, 'd')
}
@ -1450,11 +1453,11 @@ export default {
this.save(true)
},
addRowXaxis(e) {
if (this.view.yaxisExt.length > 1) {
this.view.yaxisExt = [this.view.yaxisExt[0]]
if (this.view.yaxisExt.length > 2) {
this.view.yaxisExt = [this.view.yaxisExt[0], this.view.yaxisExt[1]]
}
if (this.view.xaxis.length > 1) {
this.view.xaxis = [this.view.xaxis[0]]
if (this.view.xaxis.length > 2) {
this.view.xaxis = [this.view.xaxis[0], this.view.xaxis[1]]
}
if (this.view.yaxis.length > 1) {
this.view.yaxis = [this.view.yaxis[0]]
@ -1680,7 +1683,7 @@ export default {
}
</script>
<style lang='scss' scoped>
<style scoped>
.padding-lr {
padding: 0 6px;
}
@ -1941,13 +1944,10 @@ export default {
padding: 0;
height: 100%;
}
.tree-select-span {
>>>div.vue-treeselect__control {
.tree-select-span >>> div.vue-treeselect__control {
height: 32px !important;
font-weight: normal !important;
}
}
.drag-block-style{
padding:2px 0 0 0;
width:100%;

@ -22,12 +22,12 @@
/>
</el-form-item>
<el-form-item v-if="valid" label=" ">
<!-- <el-form-item v-if="valid" label=" ">
<el-checkbox v-model="form.enablePwd" @change="resetEnablePwd">{{ $t('panel.passwd_protect') }} </el-checkbox>
<span v-if="form.enablePwd" class="de-span">{{ form.pwd }}</span>
<span v-if="form.enablePwd" class="de-span" @click="resetPwd"><el-link :underline="false" type="primary">{{ $t('commons.reset') }}</el-link></span>
</el-form-item>
</el-form-item> -->
<div v-if="valid" class="auth-root-class">
<span slot="footer">

@ -13,7 +13,7 @@
{{ uiInfo['ui.loginTitle'].paramValue }}
</div>
<div v-else class="login-welcome">
{{ (uiInfo && uiInfo['ui.title'] && uiInfo['ui.title'].paramValue || 'Ipsos VIA BIBoard') }}
{{ (uiInfo && uiInfo['ui.title'] && uiInfo['ui.title'].paramValue || 'Ipsos BIboard') }}
</div>
<div class="login-form">
<el-form-item v-if="loginTypes.length > 1">

@ -153,9 +153,9 @@
<!-- <el-dropdown-item icon="el-icon-right" :command="beforeClickMore('move',data,node)">-->
<!-- {{ $t('dataset.move_to') }}-->
<!-- </el-dropdown-item>-->
<!-- <el-dropdown-item v-if="data.nodeType==='panel'" icon="el-icon-paperclip" :command="beforeClickMore('link',data,node)">-->
<!-- {{ $t('panel.create_public_links') }}-->
<!-- </el-dropdown-item>-->
<el-dropdown-item v-if="data.nodeType==='panel'" icon="el-icon-paperclip" :command="beforeClickMore('link',data,node)">
{{ $t('panel.create_public_links') }}
</el-dropdown-item>
<!-- <el-dropdown-item v-if="data.nodeType==='panel'" :disabled="data.isDefault" icon="el-icon-copy-document" :command="beforeClickMore('toDefaultPanel',data,node)">-->
<!-- {{ $t('panel.to_default_panel') }}-->
<!-- </el-dropdown-item>-->
@ -237,7 +237,6 @@ import {
DEFAULT_COMMON_CANVAS_STYLE_STRING
} from '@/views/panel/panel'
import TreeSelector from '@/components/TreeSelector'
import { post } from '@/api/chart/chart'
export default {
name: 'PanelList',

Loading…
Cancel
Save