前臺vue+elementui 後臺java 實現動態(可擴展)表頭

效果圖:下邊的table比上邊的table多了一列

思路:前臺其實很好實現,兩個數組,一個是表頭,一個是數據,分別循環就行了,後臺把表頭集合作爲查詢條件,然後拼接sql,就可以得到一一對應的結果了。

重點:我覺得重點其實是數據結構,重點是兩張表,一張是主表,存放固定屬性,一張是付表,主要寸的是表頭結果數據。

還有表頭的基礎數據是單獨一張表。

舉個例子:做一個優秀員工的評選,評選標準有長得是否好看、喫的多少、頭髮長短。。。。。。,我把員工姓名這些一直不變的放到主表裏面,然後把評選標準結果放到附表裏面,爲了支持動態擴展評價標準,附表其實寸的是數據,是一個列轉行的問題

表結構如下:

主表a:

id,name

附表b:

id,type,value,pid

表頭數據c:

id,type

模擬保存數據:表頭數據裏面存入5條數據,即5個評價標準,然後保存優先員工1的數據到表a和表b裏面,這時候應該是表a,存入一條數據,而表b存入5條數據。

對應標的結果如下:

主表a:

id,name

111,優秀員工1

附表b:

id,        type,      value,  pid

222,團隊協作,0,111

223,工作態度,0,111

224,工作績效,0,111

225,管理績效,1,111

226,考覈天數,3,111

表頭數據c:

id,type

333,團隊協作

444,工作態度

555,工作績效

666,管理績效

777,考覈天數

查詢數據:查詢數據的方法就是拼sql,兩點需要注意:1:先查表c,獲取有多少表頭,2根據查詢到的表頭數據集合循環,利用case when 拼接sql ,這樣select 出來的字段,就能和前臺vue定義的集合是一對一的關係了。

上代碼:

 

 

要是都看懂了,要啥代碼

 

 

 

 

 

 

 

 

 

 

後臺拼接sql關鍵代碼:


//拼接查詢條件,即動態表頭
for (Map<String, Object> map : selectItems) {
	String key = (String) map.get("key");
	String keyName = (String) map.get("keyName");
	selectSql1 += " max(case when s.item_type = '" + keyName
		+ "' then s.item_score else  0 end ) as '" + key + "', ";
			
}
//查詢數據
String sqlPeople1 = "SELECT  "
    + selectSql1
    + " m.* "
    + " FROM mark_project m "
    + " left join score_de s on m.id = s.pid "
    + " where 1=1 "
    + " and m.leader_id = '" + teamLeaderId + "' "
    + " and m.begin_time >= '" + beginWeekDate + "' "
    + " and m.end_time <= '" + endWeekDate + "' ";



前端渲染:

        <!-- listPeople是表格數據集合  ,columns是表頭集合   -->
            <el-table border :data="listPeople" style="width: 100%">
                <div>
                  <el-table-column prop="user_name" label="名字" fixed align="center"></el-table-column>
                </div>

                <div v-for="(column,i) in columns" :key="i">
                  <el-table-column :prop="column.key" :label="column.keyName" align="center"></el-table-column>
                </div>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章