Merge branch 'dev' into pr@dev_eslint_auto_fix

This commit is contained in:
dataeaseShu 2022-11-02 14:29:39 +08:00
commit b57be80aad
21 changed files with 146 additions and 64 deletions

View File

@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* Author: wangjiahao
@ -20,19 +21,26 @@ import java.util.List;
@Service
public class PanelGroupExtendDataService {
private final static String transDataKey = "data" + "s";
@Resource
private PanelGroupExtendDataMapper panelGroupExtendDataMapper;
public ChartViewDTO getChartDataInfo(String viewId,ChartViewDTO view){
public ChartViewDTO getChartDataInfo(String viewId, ChartViewDTO view) {
Gson gson = new Gson();
PanelGroupExtendDataExample extendDataExample = new PanelGroupExtendDataExample();
extendDataExample.createCriteria().andViewIdEqualTo(viewId);
List<PanelGroupExtendData> extendDataList = panelGroupExtendDataMapper.selectByExampleWithBLOBs(extendDataExample);
if(CollectionUtils.isNotEmpty(extendDataList)){
ChartViewDTO chartViewTemplate = gson.fromJson(extendDataList.get(0).getViewDetails(),ChartViewDTO.class);
List<PanelGroupExtendData> extendDataList = panelGroupExtendDataMapper.selectByExampleWithBLOBs(extendDataExample);
if (CollectionUtils.isNotEmpty(extendDataList)) {
ChartViewDTO chartViewTemplate = gson.fromJson(extendDataList.get(0).getViewDetails(), ChartViewDTO.class);
Map<String, Object> dataInfo = chartViewTemplate.getData();
if (dataInfo.get(transDataKey) != null) {
dataInfo.put("data", dataInfo.get(transDataKey));
dataInfo.remove(transDataKey);
}
view.setData(chartViewTemplate.getData());
}else{
DataEaseException.throwException("模板缓存数据中未获取指定视图数据:"+viewId);
} else {
DataEaseException.throwException("模板缓存数据中未获取指定视图数据:" + viewId);
}
return view;
}

View File

@ -40,6 +40,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.pentaho.di.core.util.UUIDUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -621,9 +622,9 @@ public class PanelGroupService {
List<String[]> details = request.getDetails();
Integer[] excelTypes = request.getExcelTypes();
details.add(0, request.getHeader());
HSSFWorkbook wb = new HSSFWorkbook();
Workbook wb = new XSSFWorkbook();
//明细sheet
HSSFSheet detailsSheet = wb.createSheet("数据");
Sheet detailsSheet = wb.createSheet("数据");
//给单元格设置样式
CellStyle cellStyle = wb.createCellStyle();
@ -641,11 +642,11 @@ public class PanelGroupService {
if (CollectionUtils.isNotEmpty(details)) {
for (int i = 0; i < details.size(); i++) {
HSSFRow row = detailsSheet.createRow(i);
Row row = detailsSheet.createRow(i);
String[] rowData = details.get(i);
if (rowData != null) {
for (int j = 0; j < rowData.length; j++) {
HSSFCell cell = row.createCell(j);
Cell cell = row.createCell(j);
if (i == 0) {// 头部
cell.setCellValue(rowData[j]);
cell.setCellStyle(cellStyle);
@ -669,14 +670,14 @@ public class PanelGroupService {
}
if (StringUtils.isNotEmpty(snapshot)) {
//截图sheet 1px 2.33dx 0.48 dy 8*24 个单元格
HSSFSheet snapshotSheet = wb.createSheet("图表");
Sheet snapshotSheet = wb.createSheet("图表");
short reDefaultRowHeight = (short) Math.round(request.getSnapshotHeight() * 3.5 / 8);
int reDefaultColumnWidth = (int) Math.round(request.getSnapshotWidth() * 0.25 / 24);
snapshotSheet.setDefaultColumnWidth(reDefaultColumnWidth);
snapshotSheet.setDefaultRowHeight(reDefaultRowHeight);
//画图的顶级管理器一个sheet只能获取一个一定要注意这点i
HSSFPatriarch patriarch = snapshotSheet.createDrawingPatriarch();
Drawing patriarch = snapshotSheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, reDefaultColumnWidth, reDefaultColumnWidth, (short) 0, 0, (short) 8, 24);
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_DO_RESIZE);
patriarch.createPicture(anchor, wb.addPicture(Base64Utils.decodeFromString(snapshot.replace(DATA_URL_TITLE, "")), HSSFWorkbook.PICTURE_TYPE_JPEG));

View File

@ -16,10 +16,13 @@ export function proxyInitPanelData(panelId, proxy, callback) {
name: response.data.name,
privileges: response.data.privileges,
proxy: proxy.userId,
sourcePanelName: response.data.sourcePanelName,
status: response.data.status,
createBy: response.data.createBy,
createTime: response.data.createTime,
creatorName: response.data.creatorName,
updateBy: response.data.updateBy,
updateName: response.data.updateName,
updateTime: response.data.updateTime
})
// 刷新联动信息

View File

@ -34,7 +34,7 @@
:style="{'height': panelHeight + 'px'}"
>
<Preview
:component-data="componentData"
:component-data="mainCanvasComponentData"
:canvas-style-data="canvasStyleData"
:panel-info="panelInfo"
:show-position="showPosition"
@ -85,6 +85,8 @@ export default {
},
data() {
return {
componentData: [],
canvasId: 'canvas-main',
visible: false,
placement: 'bottom',
transition: 'el-zoom-in-top',
@ -100,6 +102,9 @@ export default {
}
},
computed: {
mainCanvasComponentData() {
return this.componentData.filter(item => item.canvasId === this.canvasId)
},
popperClass() {
const _c = 'el-view-select-popper ' + this.popoverClass
return this.disabled ? _c + ' disabled ' : _c
@ -148,6 +153,7 @@ export default {
panelDataPrepare(JSON.parse(response.data.panelData), JSON.parse(response.data.panelStyle), rsp => {
this.viewLoaded = true
this.componentData = rsp.componentData
this.$store.commit('setPreviewComponentData', this.componentData)
this.canvasStyleData = rsp.componentStyle
this.loadOptions()
})

View File

@ -6,6 +6,7 @@
<div
id="main-attr"
style="position: relative;"
@mousedown="mouseDown"
>
<div
v-if="attrShow('textAlign')"
@ -658,6 +659,9 @@ export default {
},
methods: {
mouseDown(e) {
e.stopPropagation()
},
init() {
if (this.styleInfo['opacity']) {
this.innerOpacity = this.styleInfo['opacity'] * 100

View File

@ -108,6 +108,8 @@ export default {
Vue.set(newView, 'needAdaptor', needAdaptor)
newView.id = uuid.v1()
newView.propValue.viewId = res.data
newView['canvasId'] = 'canvas-main'
newView['canvasPid'] = '0'
if (newView.filters && newView.filters.length) {
newView.filters = []
}

View File

@ -231,6 +231,10 @@ export function imgUrlTrans(url) {
}
}
export function getNowCanvasComponentData(canvasId) {
return store.state.componentData.filter(item => item.canvasId === canvasId)
export function getNowCanvasComponentData(canvasId, showPosition) {
if (showPosition && (showPosition.includes('email-task') || showPosition.includes('multiplexing'))) {
return store.state.previewComponentData.filter(item => item.canvasId === canvasId)
} else {
return store.state.componentData.filter(item => item.canvasId === canvasId)
}
}

View File

@ -24,7 +24,7 @@
<span>{{ $t('denumberrange.split_placeholder') }}</span>
<el-form-item
prop="max"
style="padding-right: 0px;width: calc(50% - 6px) !important;"
style="padding-right: 0px;width: calc(50% - 4px) !important;"
>
<el-input
ref="de-number-range-max"

View File

@ -3,6 +3,8 @@
class="de-tabs-div"
:class="headClass"
>
<div v-if="maskShow" class="frame-mask edit-mask" >
</div>
<dataease-tabs
v-model="activeTabName"
type="card"
@ -76,6 +78,7 @@
:canvas-id="element.id+'-'+item.name"
:panel-info="panelInfo"
:in-screen="true"
:show-position="showPosition"
/>
</div>
@ -293,6 +296,9 @@ export default {
}
},
computed: {
maskShow(){
return Boolean(this.$store.state.dragComponentInfo)
},
titleStyle() {
return {
fontSize: (this.element.style.fontSize || 16) + 'px'
@ -344,16 +350,32 @@ export default {
'pcComponentData'
]),
fontColor() {
return this.element && this.element.style && this.element.style.headFontColor || 'none'
if (this.element && this.element.style && this.element.style.headFontColor && typeof this.element.style.headFontColor === 'string') {
return this.element.style.headFontColor
} else {
return 'none'
}
},
activeColor() {
return this.element && this.element.style && this.element.style.headFontActiveColor || 'none'
if (this.element && this.element.style && this.element.style.headFontActiveColor && typeof this.element.style.headFontActiveColor === 'string') {
return this.element.style.headFontActiveColor
} else {
return 'none'
}
},
borderColor() {
return this.element && this.element.style && this.element.style.headBorderColor || 'none'
if (this.element && this.element.style && this.element.style.headBorderColor && typeof this.element.style.headBorderColor === 'string') {
return this.element.style.headBorderColor
} else {
return 'none'
}
},
borderActiveColor() {
return this.element && this.element.style && this.element.style.headBorderActiveColor || 'none'
if (this.element && this.element.style && this.element.style.headBorderActiveColor && typeof this.element.style.headBorderActiveColor === 'string') {
return this.element.style.headBorderActiveColor
} else {
return 'none'
}
},
titleValid() {
return !!this.textarea && !!this.textarea.trim()
@ -431,7 +453,7 @@ export default {
if (this.mobileLayoutStatus) {
return this.pcComponentData.filter(item => item.canvasId === tabCanvasId)
} else {
return getNowCanvasComponentData(tabCanvasId)
return getNowCanvasComponentData(tabCanvasId, this.showPosition)
}
},
setContentThemeStyle() {
@ -642,20 +664,40 @@ export default {
.canvas_move_in {
border-color: blueviolet;
}
::v-deep .el-tabs__nav{
::v-deep .el-tabs__nav {
width: 100%;
}
.tab-head-left ::v-deep .el-tabs__nav{
.tab-head-left ::v-deep .el-tabs__nav {
width: 100%;
text-align: left;
}
.tab-head-right ::v-deep .el-tabs__nav{
.tab-head-right ::v-deep .el-tabs__nav {
width: 100%;
text-align: right;
}
.tab-head-center ::v-deep .el-tabs__nav{
.tab-head-center ::v-deep .el-tabs__nav {
width: 100%;
text-align: center;
}
.frame-mask {
display: flex;
opacity: 0;
position:absolute;
top:0px;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
}
.edit-mask{
left: 0px;
height: 100%!important;
width: 100% !important;
}
</style>

View File

@ -24,8 +24,7 @@ const dialogPanel = {
const drawPanel = {
type: 'custom',
style: {
width: 500,
// height: 45.5,
width: 300,
height: 90,
fontSize: 14,
fontWeight: 500,

View File

@ -152,7 +152,8 @@ const data = {
width: 0,
height: 0
},
previewVisible: false
previewVisible: false,
previewComponentData: []
},
mutations: {
...animation.mutations,
@ -205,9 +206,6 @@ const data = {
}
state.styleChangeTimes = 0
state.curComponent = component
if (index !== null && !isNaN(index)) {
state.componentData.splice(index, 1, component)
}
state.curComponentIndex = index
},
@ -245,7 +243,9 @@ const data = {
setComponentData(state, componentData = []) {
Vue.set(state, 'componentData', componentData)
},
setPreviewComponentData(state, previewComponentData = []) {
Vue.set(state, 'previewComponentData', previewComponentData)
},
setComponentViewsData(state, componentViewsData = {}) {
Vue.set(state, 'componentViewsData', componentViewsData)
},
@ -623,6 +623,13 @@ const data = {
},
addCurMultiplexingComponent(state, { component, componentId }) {
if (componentId) {
if (component.type === 'custom-button' && component.serviceName === 'buttonSureWidget') {
const copyComponent = deepCopy(component)
copyComponent.options.attrs.customRange = false
copyComponent.options.attrs.filterIds = []
state.curMultiplexingComponents[componentId] = copyComponent
return
}
state.curMultiplexingComponents[componentId] = component
}
},

View File

@ -58,8 +58,8 @@ export const TYPE_CONFIGS = [
'tableTitleHeight',
'tableItemHeight',
'tableColumnMode',
'tableShowIndex',
'tableIndexLabel'
'showIndex',
'indexLabel'
],
'title-selector-ant-v': [
'show',
@ -106,8 +106,8 @@ export const TYPE_CONFIGS = [
'tableTitleHeight',
'tableItemHeight',
'tableColumnMode',
'tableShowIndex',
'tableIndexLabel'
'showIndex',
'indexLabel'
],
'title-selector-ant-v': [
'show',
@ -1163,8 +1163,8 @@ export const TYPE_CONFIGS = [
'fontSize',
'color',
'position-pie',
'label-content',
'reserve-decimal-count'
'labelContent',
'reserveDecimalCount'
],
'tooltip-selector-ant-v': [
'show',
@ -1223,8 +1223,8 @@ export const TYPE_CONFIGS = [
'fontSize',
'color',
'position-pie',
'label-content',
'reserve-decimal-count'
'labelContent',
'reserveDecimalCount'
],
'tooltip-selector-ant-v': [
'show',
@ -1400,7 +1400,7 @@ export const TYPE_CONFIGS = [
'fontSize',
'color',
'position-v',
'reserve-decimal-count'
'reserveDecimalCount'
],
'tooltip-selector-ant-v': [
'show',
@ -1757,8 +1757,8 @@ export const TYPE_CONFIGS = [
'tableTitleHeight',
'tableItemHeight',
'tableColumnWidth',
'tableShowIndex',
'tableIndexLabel'
'showIndex',
'indexLabel'
],
'title-selector': [
'show',
@ -1798,8 +1798,8 @@ export const TYPE_CONFIGS = [
'tableTitleHeight',
'tableItemHeight',
'tableColumnWidth',
'tableShowIndex',
'tableIndexLabel'
'showIndex',
'indexLabel'
],
'title-selector': [
'show',

View File

@ -483,13 +483,13 @@ export default {
height:100%;
}
.table-dom-info-drill{
height:calc(100% - 36px - 12px);
height:calc(100% - 36px - 24px);
}
.table-dom-info-drill-pull{
height:calc(100% - 12px);
height:calc(100% - 24px);
}
.table-dom-normal-drill{
height:calc(100% - 12px);
height:calc(100% - 24px);
}
.table-page{
display: flex;
@ -507,6 +507,7 @@ export default {
font-size: 12px;
color: #606266;
white-space:nowrap;
padding-left: 8px;
}
.page-style ::v-deep .el-input__inner{
height: 24px;

View File

@ -19,7 +19,7 @@
</el-form-item>
<div v-show="labelForm.show">
<el-form-item
v-show="showProperty('label-content')"
v-show="showProperty('labelContent')"
:label="$t('chart.label_content')"
class="form-item"
>
@ -123,7 +123,7 @@
</el-select>
</el-form-item>
<el-form-item
v-show="showProperty('reserve-decimal-count') && (chart.type.includes('percentage') || labelForm.labelContent.includes('proportion'))"
v-show="showProperty('reserveDecimalCount') && (chart.type.includes('percentage') || labelForm.labelContent.includes('proportion'))"
:label="$t('chart.label_reserve_decimal_count')"
class="form-item"
>

View File

@ -370,7 +370,7 @@
/>
</el-form-item>
<el-form-item
v-show="showProperty('tableShowIndex')"
v-show="showProperty('showIndex')"
label-width="100px"
:label="$t('chart.table_show_index')"
class="form-item"
@ -378,14 +378,14 @@
<el-radio-group
v-model="sizeForm.showIndex"
input-size="mini"
@change="changeBarSizeCase('tableShowIndex')"
@change="changeBarSizeCase('showIndex')"
>
<el-radio :label="true">{{ $t('panel.yes') }}</el-radio>
<el-radio :label="false">{{ $t('panel.no') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-show="showProperty('tableIndexLabel') && sizeForm.showIndex"
v-show="showProperty('indexLabel') && sizeForm.showIndex"
label-width="100px"
:label="$t('chart.table_index_desc')"
class="form-item"
@ -393,7 +393,7 @@
<el-input
v-model="sizeForm.indexLabel"
type="text"
@blur="changeBarSizeCase('tableIndexLabel')"
@blur="changeBarSizeCase('indexLabel')"
/>
</el-form-item>

View File

@ -359,7 +359,7 @@
/>
</el-form-item>
<el-form-item
v-show="showProperty('tableShowIndex')"
v-show="showProperty('showIndex')"
label-width="100px"
:label="$t('chart.table_show_index')"
class="form-item"
@ -367,14 +367,14 @@
<el-radio-group
v-model="sizeForm.showIndex"
input-size="mini"
@change="changeBarSizeCase('tableShowIndex')"
@change="changeBarSizeCase('showIndex')"
>
<el-radio :label="true">{{ $t('panel.yes') }}</el-radio>
<el-radio :label="false">{{ $t('panel.no') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-show="showProperty('tableIndexLabel') && sizeForm.showIndex"
v-show="showProperty('indexLabel') && sizeForm.showIndex"
label-width="100px"
:label="$t('chart.table_index_desc')"
class="form-item"
@ -382,7 +382,7 @@
<el-input
v-model="sizeForm.indexLabel"
type="text"
@blur="changeBarSizeCase('tableIndexLabel')"
@blur="changeBarSizeCase('indexLabel')"
/>
</el-form-item>

View File

@ -26,6 +26,7 @@
@onChangeSplitForm="onChangeSplitForm"
@onTextChange="onTextChange"
@onLegendChange="onLegendChange"
@onMarginChange="onMarginChange"
/>
<el-row v-else>
<div class="view-selected-message-class">
@ -99,6 +100,9 @@ export default {
onLegendChange(val) {
this.batchOptChange('customStyle', 'legend', val)
},
onMarginChange(val) {
this.batchOptChange('customStyle', 'margin', val)
},
batchOptChange(custom, property, value) {
this.$store.commit('setChangeProperties', {
'custom': custom,

View File

@ -75,7 +75,7 @@ export default {
},
computed: {
mainCanvasComponentData() {
return getNowCanvasComponentData(this.canvasId)
return this.componentData.filter(item => item.canvasId === this.canvasId)
}
},
watch: {
@ -105,6 +105,7 @@ export default {
_this.componentData = rsp.componentData
_this.canvasStyleData = rsp.componentStyle
_this.selectedPanel = params
_this.$store.commit('setPreviewComponentData', _this.componentData)
})
})
} else if (params.showType === 'view') {

View File

@ -239,7 +239,7 @@ export default {
watch: {
'childViews.datasetParams': {
handler(newName, oldName) {
if (this.attrs.parameters.length > 0 && this.attrs.parameters[0].indexOf('|DE|') === -1) {
if (this.attrs.parameters?.length && this.attrs.parameters[0].indexOf('|DE|') === -1) {
const parameters = []
for (var i = 0; i < this.attrs.parameters.length; i++) {
if (this.attrs.parameters[i].indexOf('|DE|') === -1) {

View File

@ -13,7 +13,7 @@
class="market-main"
>
<el-row>
<el-col span="12">
<el-col :span="12">
<span class="title-left">{{ $t('panel.template_market') }}</span>
</el-col>
<el-col span="12">
@ -23,7 +23,7 @@
size="small"
class="title-right"
:placeholder="$t('panel.enter_template_name_tips')"
clearable="true"
:clearable="true"
/>
</el-col>
</el-row>
@ -88,7 +88,7 @@
:visible.sync="folderSelectShow"
width="600px"
class="market-dialog-css"
append-to-body="true"
:append-to-body="true"
:destroy-on-close="true"
>
<el-form

View File

@ -255,7 +255,7 @@ export default {
},
methods: {
showError() {
const errKeys = ['WecomError', 'DingtalkError', 'LarkError']
const errKeys = ['WecomError', 'DingtalkError', 'LarkError', 'LarksuiteError']
errKeys.forEach(key => {
const msg = Cookies.get(key)
if (msg) {