mirror of
https://github.com/dataease/dataease.git
synced 2025-02-24 19:42:56 +08:00
Merge pull request #1205 from dataease/pr@dev@refactor_panel
refactor:仪表板视图联动,使用相同数据集的视图,自动补充联动字段
This commit is contained in:
commit
aa69d3ebdc
@ -20,4 +20,6 @@ public interface ExtChartViewMapper {
|
|||||||
List<String> allViewIds(@Param("tableId") String tableId);
|
List<String> allViewIds(@Param("tableId") String tableId);
|
||||||
|
|
||||||
String searchAdviceSceneId(@Param("userId") String userId,@Param("panelId") String panelId);
|
String searchAdviceSceneId(@Param("userId") String userId,@Param("panelId") String panelId);
|
||||||
|
|
||||||
|
int checkSameDataSet(@Param("viewIdSource") String viewIdSource,@Param("viewIdTarget") String viewIdTarget);
|
||||||
}
|
}
|
||||||
|
@ -136,18 +136,7 @@
|
|||||||
id = #{oldChartId}
|
id = #{oldChartId}
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<select id="searchAdviceSceneId" resultType="String">
|
<select id="checkSameDataSet" resultType="int">
|
||||||
SELECT DISTINCT
|
select count(DISTINCT table_id) from chart_view where id = #{viewIdSource} or id = #{viewIdTarget}
|
||||||
( scene_id )
|
|
||||||
FROM
|
|
||||||
( SELECT GET_V_AUTH_MODEL_ID_P_USE ( #{userId}, 'chart' ) cids ) t,
|
|
||||||
panel_view
|
|
||||||
LEFT JOIN chart_view ON panel_view.chart_view_id = chart_view.id
|
|
||||||
LEFT JOIN chart_group ON chart_view.scene_id = chart_group.id
|
|
||||||
WHERE
|
|
||||||
FIND_IN_SET( chart_view.scene_id, cids ) and panel_view.panel_id =#{panelId}
|
|
||||||
ORDER BY
|
|
||||||
chart_group.create_time DESC
|
|
||||||
LIMIT 1
|
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
@ -107,4 +107,10 @@ public class ChartViewController {
|
|||||||
public ChartViewDTO calcData(@RequestBody ChartCalRequest request) throws Exception {
|
public ChartViewDTO calcData(@RequestBody ChartCalRequest request) throws Exception {
|
||||||
return chartViewService.calcData(request.getView(), request.getRequestList(), false);
|
return chartViewService.calcData(request.getView(), request.getRequestList(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("验证视图是否使用相同数据集")
|
||||||
|
@GetMapping("/checkSameDataSet/{viewIdSource}/{viewIdTarget}")
|
||||||
|
public String checkSameDataSet(@PathVariable String viewIdSource,@PathVariable String viewIdTarget) throws Exception {
|
||||||
|
return chartViewService.checkSameDataSet(viewIdSource,viewIdTarget);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1455,4 +1455,12 @@ public class ChartViewService {
|
|||||||
public String searchAdviceSceneId(String panelId) {
|
public String searchAdviceSceneId(String panelId) {
|
||||||
return extChartViewMapper.searchAdviceSceneId(AuthUtils.getUser().getUserId().toString(), panelId);
|
return extChartViewMapper.searchAdviceSceneId(AuthUtils.getUser().getUserId().toString(), panelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String checkSameDataSet(String viewIdSource,String viewIdTarget) {
|
||||||
|
if(extChartViewMapper.checkSameDataSet(viewIdSource,viewIdTarget)==1){
|
||||||
|
return "YES";
|
||||||
|
}else{
|
||||||
|
return "NO";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,3 +52,11 @@ export function searchAdviceSceneId(panelId) {
|
|||||||
loading: true
|
loading: true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function checkSameDataSet(viewIdSource, viewIdTarget) {
|
||||||
|
return request({
|
||||||
|
url: '/chart/view/checkSameDataSet/' + viewIdSource + '/' + viewIdTarget,
|
||||||
|
method: 'get',
|
||||||
|
loading: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -15,11 +15,10 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-row style="height: 120px;overflow-y: auto">
|
<el-row style="height: 120px;overflow-y: auto">
|
||||||
|
<el-row v-for="(itemLinkage, index) in linkageInfo.linkageFields" :key="index">
|
||||||
<el-row v-for="(item, index) in linkageInfo.linkageFields" :key="index">
|
|
||||||
<el-col :span="11">
|
<el-col :span="11">
|
||||||
<div class="select-filed">
|
<div class="select-filed">
|
||||||
<el-select v-model="item.sourceField" size="mini" placeholder="请选择">
|
<el-select v-model="itemLinkage.sourceField" size="mini" placeholder="请选择">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in sourceLinkageInfo.targetViewFields"
|
v-for="item in sourceLinkageInfo.targetViewFields"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
@ -39,7 +38,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="11">
|
<el-col :span="11">
|
||||||
<div class="select-filed">
|
<div class="select-filed">
|
||||||
<el-select v-model="item.targetField" size="mini" placeholder="请选择">
|
<el-select v-model="itemLinkage.targetField" size="mini" placeholder="请选择">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in linkageInfo.targetViewFields"
|
v-for="item in linkageInfo.targetViewFields"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
@ -52,7 +51,7 @@
|
|||||||
<svg-icon v-if="item.deType === 2 || item.value === 3" icon-class="field_value" class="field-icon-value" />
|
<svg-icon v-if="item.deType === 2 || item.value === 3" icon-class="field_value" class="field-icon-value" />
|
||||||
<svg-icon v-if="item.deType === 5" icon-class="field_location" class="field-icon-location" />
|
<svg-icon v-if="item.deType === 5" icon-class="field_location" class="field-icon-location" />
|
||||||
</span>
|
</span>
|
||||||
<span style="float: left; color: #8492a6; font-size: 12px">{{ item.name }}</span>
|
<span style="float: left; color: #8492a6; font-size: 12px">{{ itemLinkage.targetField }}-{{ item.name }}</span>
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
@ -66,7 +65,7 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-row class="bottom">
|
<el-row class="bottom">
|
||||||
<el-button size="mini" type="success" icon="el-icon-plus" round @click="addLinkageField">追加联动依赖字段</el-button>
|
<el-button size="mini" type="success" icon="el-icon-plus" round @click="addLinkageField(null,null)">追加联动依赖字段</el-button>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<!-- <el-button slot="reference">T</el-button>-->
|
<!-- <el-button slot="reference">T</el-button>-->
|
||||||
@ -76,6 +75,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
|
import { checkSameDataSet } from '@/api/chart/chart'
|
||||||
export default {
|
export default {
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
@ -105,6 +105,17 @@ export default {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
// 初始化映射关系 如果当前是相同的数据集且没有关联关系,则自动补充映射关系
|
||||||
|
checkSameDataSet(this.curLinkageView.propValue.viewId, this.element.propValue.viewId).then(res => {
|
||||||
|
console.log('linkageFields:' + JSON.stringify(this.linkageInfo.linkageFields))
|
||||||
|
if (res.data === 'YES' && this.linkageInfo.linkageFields.length === 0) {
|
||||||
|
this.sourceLinkageInfo.targetViewFields.forEach(item => {
|
||||||
|
this.addLinkageField(item.id, item.id)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
linkageInfo() {
|
linkageInfo() {
|
||||||
return this.targetLinkageInfo[this.element.propValue.viewId]
|
return this.targetLinkageInfo[this.element.propValue.viewId]
|
||||||
@ -137,10 +148,10 @@ export default {
|
|||||||
deleteLinkageField(index) {
|
deleteLinkageField(index) {
|
||||||
this.linkageInfo.linkageFields.splice(index, 1)
|
this.linkageInfo.linkageFields.splice(index, 1)
|
||||||
},
|
},
|
||||||
addLinkageField() {
|
addLinkageField(sourceFieldId, targetFieldId) {
|
||||||
const linkageFieldItem = {
|
const linkageFieldItem = {
|
||||||
sourceViewId: null,
|
sourceField: sourceFieldId,
|
||||||
targetViewId: null
|
targetField: targetFieldId
|
||||||
}
|
}
|
||||||
this.linkageInfo.linkageFields.push(linkageFieldItem)
|
this.linkageInfo.linkageFields.push(linkageFieldItem)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user