实现效果:

java jtable动态 线程 javaweb动态表格_javascript

页面实现的功能:

根据效果图可以看出此页面实现的功能,数据来源是后勤的满意度调查报表,表头是满意度报表的所有问题;后台返回的表头数据中,包含一个“quesType”属性,此属性的值为5、8、9时,单元格为一个“查看详情”按钮,在点击按钮时,展示对应问题所有建议的拼接。整个页面是一个汇总功能,汇总所有用户的选择结果,按照基地分行展示

组件介绍:

前端vue + 后端java
表头是调用后台java方法动态生成的,很灵活,表中的数据也是后台根据数据库中的数据生成
前端表格所用的组件:el-table,所有的用法都参考自——https://element.eleme.cn/#/zh-CN/component/table

页面元素:

页面主要包含三个技术点,1.动态表头的展示,2.数据与每行每列的绑定,3.页面还包含按钮的点击事件

动态表头

<!--    整个表格定义,绑定数据为tableData-->
    <el-table
      id="table"
      :data="tableData"
      :border="true"
      style="width: 100%">
<!--      表头定义,quesType不为 5 9 8 的,正常显示,表头数据为tableColumn-->
<!--      表头嵌套,目前的需求是最多三层,所以嵌套三层就足够-->
      <el-table-column
        v-for="(item, index) in tableColumn"
        v-if="item.quesType != '5' && item.quesType != '9' && item.quesType != '8'"
        :label="item.name"
        :key="item.prop"
        align="center"
        :prop="item.prop"
      >
        <el-table-column
          v-for="(sonItem, index) in item.children?item.children:[]"
          :label="sonItem.name"
          :key="sonItem.prop"
          align="center"
          :prop="sonItem.prop"
        >
          <el-table-column
            v-for="(sonItem2, index) in sonItem.children?sonItem.children:[]"
            :label="sonItem2.name"
            :key="sonItem2.prop"
            align="center"
            :prop="sonItem2.prop"
          >
          </el-table-column>
        </el-table-column>
      </el-table-column>
<!--      如果quesType为5 9 8,那么单元格设置为按钮(目前需求,只要类型为589,那表头就是非嵌套的,所以这样写就能满足需求)-->
      <el-table-column
        v-for="(item, index) in tableColumn"
        v-if="item.quesType == '5' || item.quesType == '9' || item.quesType == '8'"
        :label="item.name"
        :key="item.prop"
        align="center"
        :prop="item.prop"
      >
        <template slot-scope="scope">
          <el-button
            size="mini"
            @click="handleEdit(scope.$index, scope.row,scope.column)">查看详情
          </el-button>
        </template>
      </el-table-column>
    </el-table>

tableColumn即表头的数据结构

tableColumn是表头的详细数据,从后台获取,主要的数据结构是List,如图

java jtable动态 线程 javaweb动态表格_前端_02


tableColumn中的每个map元素都包含 “prop”、“name”、“quesType”属性,如果有二级表头,则含有“childern”属性;chidren属性与tableColumn的数据结构基本一致,是List数据类型,只是chidren的map去掉了于chidren无用的“quesType”属性,同理,如果有三级表头,chidren可以设置自己的“chidren”属性。

其中,prop属性至关重要,他是设置数据时定位列的标识,可以理解为列坐标,我这里取的是二级标题(如果有三级标题那么取三级标题)在后台数据库中的id,这表明这个属性唯一且不重复;name属性是表头展示的信息,quesType属性上文已经提过,只是本次的需求决定他的存在,如果没有这种需求,那么这个属性也不是必要的。

tableData即报表内容的数据结构

tableData是报表内的数据,从后台获取,数据结构是List

java jtable动态 线程 javaweb动态表格_javascript_03


tableData中每个list是一行数据,map中的key为表头id,value为显示值,按照这种方式构建每一行数据

从后台获取对应的格式的数据,然后赋给前端,这个功能就实现了。