mirror of
https://github.com/dataease/dataease.git
synced 2025-02-24 19:42:56 +08:00
refactor:仪表板视图联动,使用相同数据集的视图,自动补充联动字段
This commit is contained in:
parent
3f5624a630
commit
0ce07f4325
@ -20,4 +20,6 @@ public interface ExtChartViewMapper {
|
||||
List<String> allViewIds(@Param("tableId") String tableId);
|
||||
|
||||
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}
|
||||
</insert>
|
||||
|
||||
<select id="searchAdviceSceneId" resultType="String">
|
||||
SELECT DISTINCT
|
||||
( 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 id="checkSameDataSet" resultType="int">
|
||||
select count(DISTINCT table_id) from chart_view where id = #{viewIdSource} or id = #{viewIdTarget}
|
||||
</select>
|
||||
</mapper>
|
||||
|
@ -107,4 +107,10 @@ public class ChartViewController {
|
||||
public ChartViewDTO calcData(@RequestBody ChartCalRequest request) throws Exception {
|
||||
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) {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
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 style="height: 120px;overflow-y: auto">
|
||||
|
||||
<el-row v-for="(item, index) in linkageInfo.linkageFields" :key="index">
|
||||
<el-row v-for="(itemLinkage, index) in linkageInfo.linkageFields" :key="index">
|
||||
<el-col :span="11">
|
||||
<div class="select-filed">
|
||||
<el-select v-model="item.sourceField" size="mini" placeholder="请选择">
|
||||
<el-select v-model="itemLinkage.sourceField" size="mini" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in sourceLinkageInfo.targetViewFields"
|
||||
:key="item.id"
|
||||
@ -39,7 +38,7 @@
|
||||
</el-col>
|
||||
<el-col :span="11">
|
||||
<div class="select-filed">
|
||||
<el-select v-model="item.targetField" size="mini" placeholder="请选择">
|
||||
<el-select v-model="itemLinkage.targetField" size="mini" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in linkageInfo.targetViewFields"
|
||||
: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 === 5" icon-class="field_location" class="field-icon-location" />
|
||||
</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-select>
|
||||
</div>
|
||||
@ -66,7 +65,7 @@
|
||||
</el-row>
|
||||
|
||||
<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-button slot="reference">T</el-button>-->
|
||||
@ -76,6 +75,7 @@
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import { checkSameDataSet } from '@/api/chart/chart'
|
||||
export default {
|
||||
|
||||
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: {
|
||||
linkageInfo() {
|
||||
return this.targetLinkageInfo[this.element.propValue.viewId]
|
||||
@ -137,10 +148,10 @@ export default {
|
||||
deleteLinkageField(index) {
|
||||
this.linkageInfo.linkageFields.splice(index, 1)
|
||||
},
|
||||
addLinkageField() {
|
||||
addLinkageField(sourceFieldId, targetFieldId) {
|
||||
const linkageFieldItem = {
|
||||
sourceViewId: null,
|
||||
targetViewId: null
|
||||
sourceField: sourceFieldId,
|
||||
targetField: targetFieldId
|
||||
}
|
||||
this.linkageInfo.linkageFields.push(linkageFieldItem)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user