From d17733bf832ebcb7d354c104f70ed2d9f5550cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=AC=A3?= Date: Sun, 28 Nov 2021 19:21:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=87=E9=A2=98=E3=80=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=93=BE=E6=8E=A5=E5=8F=8A=E4=BA=A4=E5=8F=89?= =?UTF-8?q?=E8=A1=A8=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/public/link.html | 2 +- frontend/public/nolic.html | 2 +- frontend/src/layout/components/Topbar.vue | 2 +- frontend/src/settings.js | 2 +- frontend/src/styles/deicon/iconfont.json | 2 +- .../chart/components/table/TableNormal.vue | 224 ++++++++++++++---- frontend/src/views/chart/view/ChartEdit.vue | 30 +-- frontend/src/views/link/generate/index.vue | 4 +- frontend/src/views/login/index.vue | 2 +- frontend/src/views/panel/list/PanelList.vue | 37 ++- 10 files changed, 213 insertions(+), 94 deletions(-) diff --git a/frontend/public/link.html b/frontend/public/link.html index bf51a33..f0eac8d 100644 --- a/frontend/public/link.html +++ b/frontend/public/link.html @@ -5,7 +5,7 @@ - Ipsos VIA BIBoard + Ipsos BIboard diff --git a/frontend/public/nolic.html b/frontend/public/nolic.html index aafff59..2277d2a 100644 --- a/frontend/public/nolic.html +++ b/frontend/public/nolic.html @@ -5,7 +5,7 @@ - Ipsos VIA BIBoard + Ipsos BIboard
diff --git a/frontend/src/layout/components/Topbar.vue b/frontend/src/layout/components/Topbar.vue index 9e1c980..7f3731f 100644 --- a/frontend/src/layout/components/Topbar.vue +++ b/frontend/src/layout/components/Topbar.vue @@ -2,7 +2,7 @@
- Ipsos VIA BIBoard + Ipsos BIboard diff --git a/frontend/src/settings.js b/frontend/src/settings.js index 5a56696..465eb0a 100644 --- a/frontend/src/settings.js +++ b/frontend/src/settings.js @@ -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', diff --git a/frontend/src/styles/deicon/iconfont.json b/frontend/src/styles/deicon/iconfont.json index b67b3ce..f98efbd 100644 --- a/frontend/src/styles/deicon/iconfont.json +++ b/frontend/src/styles/deicon/iconfont.json @@ -1,6 +1,6 @@ { "id": "2459092", - "name": "Ipsos VIA BIBoard", + "name": "Ipsos BIboard", "font_family": "iconfont", "css_prefix_text": "icon-", "description": "", diff --git a/frontend/src/views/chart/components/table/TableNormal.vue b/frontend/src/views/chart/components/table/TableNormal.vue index 15b3675..8673472 100644 --- a/frontend/src/views/chart/components/table/TableNormal.vue +++ b/frontend/src/views/chart/components/table/TableNormal.vue @@ -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 @@ > + :title="field.name" + > + + @@ -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 - } - if (name !== ele[fieldName]) { - columnValue.push({ - [fieldName]: ele[fieldName] - }) - } - name = ele[fieldName] - if (name === ele[fieldName] && flag) { - fields.push({ - dataeaseName: fieldRowName + ele[fieldRowName], - name: ele[fieldRowName] + 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 (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) + } + }) + item.subFields = newArr }) + } else { + rowName = this.deteleObject(rowName) } }) - columnValue.forEach(ele => { - datas.forEach(subEle => { - if (ele[fieldName] === subEle[fieldName]) { - const key = fieldRowName + subEle[fieldRowName] - ele[key] = subEle[fieldValueName] - rowSum += subEle[fieldValueName] + 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 + }) + } + } } }) - ele.rowTotal = rowSum - rowSum = 0 - }) + 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[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))) { diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 2ece763..965117d 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -536,7 +536,7 @@
- +
@@ -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 { } -