Merge pull request #1205 from dataease/pr@dev@refactor_panel

refactor:仪表板视图联动,使用相同数据集的视图,自动补充联动字段
This commit is contained in:
王嘉豪 2021-11-15 16:24:55 +08:00 committed by GitHub
commit aa69d3ebdc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 46 additions and 22 deletions

View File

@ -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);
}

View File

@ -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>

View File

@ -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);
}
}

View File

@ -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";
}
}
}

View File

@ -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
})
}

View File

@ -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)
}