精华内容
下载资源
问答
  • VUE合并

    2021-09-10 09:38:11
    Element UI中合并行真是坑人啊,你想使用它,你必须先知道哪些是要合并的才行,所以在列表加载之前,我们要... mergeList:[], //需要合并的字段 //column:列,从0开始 //name:此列的字段 //maxName:根据上一个字.

    参考文章:Element - The world's most popular Vue UI framework 

    Element UI中合并行真是坑人啊,你想使用它,你必须先知道哪些是要合并的才行,所以在列表加载之前,我们要做准备工作。

    export default {
      data(){
        return{
          //主列表
          dataObj:[],
    
          //通过计算得知需要合并的行
          mergeList:[],
    
          //需要合并的字段
          //column:列,从0开始
          //name:此列的字段
          //maxName:根据上一个字段进行合并
          keyList:[
            {column:1,name:'aaa',maxName:'aaa'},
            {column:2,name:'bbb',maxName:'aaa'},
            {column:3,name:'ccc',maxName:'aaa'},
            {column:4,name:'ddd',maxName:'ccc'},
          ],
        }
      },

    加载列表的时候,需要先清空主列表和需要合并的列表,一定要清空,一定要清空,一定要清空(重要的事情说三遍),查询出结果后,先去寻找我们要合并的行,再去加载主列表,顺序不能乱。

    加载主列表的时候需要合并行,我写了个js,可以复用给其它页面使用。

    import basicUtil from "../../util/basicUtil";
    export default {
    
    methods:{
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
     return basicUtil.objectSpanMethod(row,rowIndex,columnIndex,this.keyList,this.mergeList);
    },
        getInfo(){
            //每次查询都要清空
            this.$set(this,'dataObj',[]);
            this.$set(this,'mergeList',[]);
            getList({}).then(res=>{
                if(res.success){
                    let result = res.result;
                    //有需要的先排序
                    //计算合并值
                    basicUtil.mergeSetKey(this.keyList,result,this.mergeList);
                    //加载主列表
                    this.$set(this,'dataObj',result);
                }
            })
        }
    }
    created() {
        this.getInfo();
    }
    }

    最重要的js来了,写的有些繁琐,但真的管用,希望各位大佬能够简化一下

    export default {
      mergeSetKey(keyList,resultList,mergeList){
        keyList.forEach(item=>{
          this.setKeyLength(resultList,mergeList,item.column,item.name,item.maxName);
        })
      },
      setKeyLength(resultList,mergeList,column,name,maxName){
        let beforeName = '';
        let beforeMaxName = '';
        let nowName = '';
        let nowMaxName = '';
        resultList.forEach((item,index)=>{
          if(index==0){
            beforeName = item[name]?item[name]:'';
            beforeMaxName = item[maxName]?item[maxName]:'';
          }
          nowName = item[name]?item[name]:'';
          nowMaxName = item[maxName]?item[maxName]:'';
          if((beforeMaxName !== nowMaxName || beforeName !== nowName) && index!=0){
            let keySum = 0;
            mergeList.forEach(keyItem=>{
              if(keyItem.column === column){
                keySum = keySum + keyItem.key;
              }
            })
            let temp = {
              column:column,
              rowIndex:keySum,
              key:index-keySum
            }
            mergeList.push(temp);
            beforeName = nowName;
            beforeMaxName = nowMaxName;
          }
          if(++index == resultList.length){
            let keySum = 0
            mergeList.forEach(keyItem=>{
              if(keyItem.column === column){
                keySum = keySum + keyItem.key;
              }
            })
            let temp = {
              column:column,
              rowIndex:keySum,
              key:index-keySum
            }
            mergeList.push(temp);
          }
        })
      },
      objectSpanMethod(row,rowIndex,columnIndex,keyList,mergeList) {
        let flag = false;
        keyList.forEach(item=>{
          if(columnIndex === item.column){
            flag = true;
          }
        })
        if(flag){
          let key = 0
          for(let i=0;i<mergeList.length;i++){
            if(mergeList[i].column===columnIndex && mergeList[i].rowIndex===rowIndex){
              key = mergeList[i].key;
              break;
            }
          }
          if(key!=0){
            return {
              rowspan: key,
              colspan: 1
            };
          }else{
            return {
              rowspan: 0,
              colspan: 0
            };
          }
        }else{
          return {
            rowspan: 1,
            colspan: 1
          };
        }
      },
    }

    最后说明一点,千万不要在其中加console.log()会非常慢。因为计算量太大,合并列或行都不适用非常庞大的主列表。

    展开全文
  • vue.js中追加list数组和合并

    万次阅读 2018-12-13 18:04:36
    需要对值进行排序 var usernames = this.sels.map(item => item.Username).toString() usernames =[1,2,3,4,5] 下面就是解决办法了 先去在 data () { return {}}中定义 dellist: [], // list数组 delItem: {} // ...

    来源:https://www.cnblogs.com/ZM-ONE/p/8855660.html

    在做批量删除的时候。需要对值进行排序

    var usernames = this.sels.map(item => item.Username).toString()
    
    usernames  =[1,2,3,4,5]
    

    下面就是解决办法了
    先去在 data () {
    return {}}中定义

          dellist: [], // list数组
          delItem: {} // 多维数组
    

    然后具体使用

    var usernames = this.sels.map(item => item.Username).toString()
          this.sels.map(item => item.Username).forEach((item, index) => {
          	// 多维数组合拼
            this.delItem = Object.assign({}, this.delItem, {Username: item}) 
            // 追加成[ {Username: item}, {Username: item}, {Username: item}]
            
            //list数组追加方式
            this.dellist = this.dellist.concat(item)
             / / 追加成[x,x,x,x,x,x]
    		
          })
          // console.log('数组delItem', JSON.stringify(this.delItem))
          console.log('数组dellist', JSON.stringify(this.dellist))
    
    展开全文
  • vue实现表格合并功能

    2021-01-18 15:40:28
    本文实例为大家分享了vue实现表格合并功能的具体代码,供大家参考,具体内容如下 1、背景 本身有vue进行渲染的数据表格,,但是出于整体考虑,需要对相同的列信息进行单元格合并。 由于使用的是vue,想到MVVM是要用...
  • Vue 数组合并

    2021-05-18 08:53:18
    Vue 数组合并 let vl ={ pic:[ {m_name:'标题',m_path:'gx/dsdsadsa.jpg',id:'4897987987'} ], ppt:[ {m_name:'标题',m_path:'gx/dsdsadsa.jpg',id:'4897987987'} ] } handleXj(vl) { let list = vl.pic....

    Vue 数组合并

    let vl ={
        pic:[
            {m_name:'标题',m_path:'gx/dsdsadsa.jpg',id:'4897987987'}
        ],
        ppt:[
            {m_name:'标题',m_path:'gx/dsdsadsa.jpg',id:'4897987987'}
        ]
    } 
    handleXj(vl) {
        let list = vl.pic.reduce((pre, cur) => {
       		let target = pre.find(ee => ee.id == cur.id);
        	if (target) {
        		Object.assign(target, cur);
             } else {
                 pre.push(cur);
             }
             return pre;
          }, vl.ppt);
    }

     

    展开全文
  • Vue实现表格合并

    千次阅读 2019-02-14 17:03:04
    然而,对方最近又提出了一个恶心需求,需要相邻的相同值的行数据项进行单元格合并,这就醉了。 由于使用的是vue,想到MVVM是要用数据驱动的思想,所以考虑在Model做手脚,而不是渲染出数据来后做DOM操作,当然基本的...

    示例保证有效:
    1. 场景
    这两天一个项目,属于子需求吧,就是要做一个页面放个简单的banner下面是张大表格用来显示数据项,纯粹为了view层操作方便,就用了vue做渲染。
    然而,对方最近又提出了一个恶心需求,需要相邻的相同值的行数据项进行单元格合并,这就醉了。

    由于使用的是vue,想到MVVM是要用数据驱动的思想,所以考虑在Model做手脚,而不是渲染出数据来后做DOM操作,当然基本的CSS还是要有的。因此这个方法对所有
    数据驱动的框架都有效,比如说Angular和React。最后的实现效果是这样的:
    在这里插入图片描述
    2. 思路
    先拿正常的表格来做测试,原生的标签就有rowspan属性支持单元格行合并,属性值指的是向下合并多少行,其实就相当于在本行中向下又添加了几个单元格。
    因为,如果接下来的一行还会渲染的话就会被挤下去,因此,下面被合并的单元格要隐藏掉,通过display: none;css控制即可。

    因此,每个标签需要带有两个属性值,rowspan和display来控制每一个单元格的合并行数和是否显示。代码变成这样了

     <tr v-for="item in tableData" :key="item.id">
                    <td>{{ item.id }}</td>
                    <td :rowspan="item.projectspan" :class="{hidden: item.projectdis}">{{ item.project }}</td>
                    <td :rowspan="item.typespan" :class="{hidden: item.typedis}">{{ item.type }}</td>
                    <td>{{item.subentry}}</td>
                    <td>{{item.nowManage}}</td>
                    <td>{{item.Hidden}}</td>
                    <td>{{item.Total}}</td>
                    <td>{{item.remark}}</td>
                  </tr>
    

    其中,这两个属性有一些特征:

    要显示的单元格rowspan为>1的值,记录接下来的行数

    要显示的单元格display为true

    接下来不显示的单元格rowspan为1且display为false

    只有一行数据的单元格rowspan为1且display为true

    实际上就是设计一个算法,对于输入的表格数组,每个数据项添加两个属性,rowspan和display,并且计算出rowspan的值为
    本列中以下相同值的行数,以及依据rowspan的值计算display的值是否显示
    ,最后将此改变后的数组输出。

    1. show me code
      getData (list) {
      // console.log(list[0]);
      for (let field in list[0]) {
      let k = 0
      let i = 0
      while (k < list.length) {
      list[k][field + ‘span’] = 1
      list[k][field + ‘dis’] = false
      for (i = k + 1; i <= list.length - 1; i++) {
      if (list[k][field] === list[i][field] && list[k][field] !== ‘’) {
      list[k][field + ‘span’]++
      list[k][field + ‘dis’] = false
      list[i][field + ‘span’] = 1
      list[i][field + ‘dis’] = true
      } else {
      // k = i
      break
      }
      }
      k = i
      }
      }
      return list
      }

    2. 总结
      代码实际上很短很简单,主要借助的是kmp的思想,定义一个指针k,开始指向第一个值,然后向下比较,以此对rowspan和display设置,
      若遇到不相同的值则判断为跳出,进行下一个循环,通知指针k加上这个过程中运算的行数,进行跳转,然后比较下一个单元格的值,和kmp的指针跳转判断相同字符串一样的原理。
      通过getData ()这个函数就可以将网络请求回来的数据进行过滤,附加上相应的值后再对vue监视的数组进行赋值操作就可以了。
      实际上此方法不仅适用于vue,数据驱动的框架都可以,包括Angular和React,要想实现表格合并,对请求回来的值过滤一下就OK。

    源码示例:

    <template>
             <div>
                <table class="table table-bordered">
                        <thead>
                          <tr>
                            <th>序号</th>
                            <th>项目</th>
                            <th>分类</th>
                            <th>分项</th>
                            <th class="w">现场管理</th>
                            <th class="w">重大隐患</th>
                            <th class="w">汇总</th>
                            <th class="w">备注</th>
                          </tr>
                          </thead>
                          <tbody>
                          <tr v-for="item in tableData" :key="item.id">
                            <td>{{ item.id }}</td>
                            <td :rowspan="item.projectspan" :class="{hidden: item.projectdis}">{{ item.project }}</td>
                            <td :rowspan="item.typespan" :class="{hidden: item.typedis}">{{ item.type }}</td>
                            <td>{{item.subentry}}</td>
                            <td>{{item.nowManage}}</td>
                            <td>{{item.Hidden}}</td>
                            <td>{{item.Total}}</td>
                            <td>{{item.remark}}</td>
                          </tr>
                          </tbody>
                      </table>
           </div>
        </template>
    <script>
        export default {
            data() {
                return {
                    title:'风险评估',
                    isShow:false,
                    isFinish:false,
                    tableData: [
                        {
                            id:1,
                            project: '企业性质分类',
                            type: '针对企业类别',
                            subentry: '生产(危险化学品生产企业)Ⅰ类A、B、C、级',
                            nowManage: '3.2',
                            Hidden: '是',
                            Total:'',
                            remark:'备注备注'
                        },
                        {
                            id:2,
                            project: '企业性质分类',
                            type: '针对企业类别',
                            subentry: '使用(兰炭及配套企业)Ⅱ类A、B、C、级',
                            nowManage: '3.2',
                            Hidden: '是',
                            Total:'',
                            remark:''
                        },
                        {
                            id:3,
                            project: '企业性质分类',
                            type: '针对企业类别',
                            subentry: '储存、经营(加油站)Ⅲ类A、B、C、级C、级',
                            nowManage: '3.2',
                            Hidden: '是',
                            Total:'',
                            remark:''
                        },
                        {
                            id:4,
                            project: '三同时执行情况',
                            type: '针对改扩',
                            subentry: '改扩建未执行',
                            nowManage: '3.2',
                            Hidden: '是',
                            Total:'',
                            remark:''
                        }
                    ]
                }
            },
            created() {
                this.getData(this.tableData);
            },
            methods: {
                onEdit(){
                    this.isShow = true
                    this.isFinish=true
                },
                onComplete(){
                    this.isShow = false
                    this.isFinish=false
                },
                getData(list){
                    //console.log(list[0]);
                    for (let field in list[0]) {
              let k = 0
              let i = 0
              while (k < list.length) {
                list[k][field + 'span'] = 1
                list[k][field + 'dis'] = false
                for (i = k + 1; i <= list.length - 1; i++) {
                  if (list[k][field] === list[i][field] && list[k][field] !== '') {
                    list[k][field + 'span']++
                    list[k][field + 'dis'] = false
                    list[i][field + 'span'] = 1
                    list[i][field + 'dis'] = true
                  } else {
                    // k = i
                    break
                  }
                }
                k = i
              }
            }
         return list;
       }
     }
    }
    </script>
    
    <style lang="less" scoped>
    .hidden{
        display: none
    }
    </style>
    
    展开全文
  • vue 实现表格合并

    千次阅读 2017-08-11 10:42:30
    1 背景本身有vue进行渲染的数据表格,,但是出于整体考虑,需要对相同的列信息进行单元格合并。由于使用的是vue,想到MVVM是要用数据驱动的思想,所以考虑在Model做手脚,而不是渲染出数据来后做DOM操作,当然基本的...
  • 基于vue通过数据过滤实现表格合并,供大家参考,具体内容如下 需求 基于vue渲染的数据表格 需要对相同的列进行合并 思路 自从使用了vue,就再也不想直接操作dom节点了,所以还是对数据操作。 要合并单元格需要用到...
  • vue 动态合并表格

    2019-06-09 01:38:47
    跟普通的合并表格不同的是 这个表格数据的列头不固定… <template> <div> <table> <thead> <th v-for="(item,index) in table.columns" :key="index" :style="'minWidth:'+ ...
  • vue实现表格合并

    2020-08-06 12:34:16
    vue实现表格合并 javascriptvue.js 发布于 2016-11-28 1. 场景 这两天一个项目,属于子需求吧,就是要做一个页面放个简单的banner下面是张大表格用来显示数据项,纯粹为了view层操作方便,就用了vue做渲染。 ...
  • addAll(Collection<? extends E> c)方法用于将指定 collection 中的所有元素添加到列表。 addAll(int index,Collection<...同时,index指的是list下标,list下标是从0开始的. 数据类型案例: Lis...
  • ant design vue 动态表格合并 首先是想要达成的效果图片展示 List item // computed 计算属性 get detailCol() { return [ { title: 'HIS业务', children: [ { title: '结算单编号', dataIndex: '...
  • 由于使用的是vue,想到MVVM是要用数据驱动的思想,所以考虑在Model做手脚,而不是渲染出数据来后做DOM操作,当然基本的CSS还是要有的。因此这个方法对所有数据驱动的框架都有效,比如说Angular和React。 最后的实现...
  • Vue数组对象合并知识

    2020-11-02 17:25:50
    Vue数组对象合并知识 参考官方文档: https://cn.vuejs.org/v2/guide/components.html vuejs 数组-合并两个数组 以下是简单的demo: var listdata= [{ "smallclassid": "21", "smallclassname": "长沙菜" }, { ...
  • Vue Elements Table 合并

    2020-12-30 17:59:00
    <template> <div> <pl-table border :data="tableList.tableData" :span-method="objectSpanMethod" style="width: 100%; margin-top: 20px"> <pl-...
  • vue中的table合并单元格用法

    千次阅读 2019-11-05 10:58:06
    colspan用来指定单元格横向跨越的列数:colspan就是合并列的,colspan=2的话就是合并两列 ...vue中的table合并单元格 </td> <td width="130px" :rowspan="infoa.infoList.length" v-if="i...
  • vue

    2020-12-05 15:51:37
    vue
  • List<subject> list=query.list(); for (subject subject : list) { Integer id= subject.getId(); Query query1=session.createQuery("from option where subjectid =:id"); query1.setString(...
  • vue中element-ui合并

    千次阅读 2019-02-26 14:35:59
    vue中element-ui合并列 在一些日常操作中,后台不会给出令前端满意的数据结构,此时就需要我们自己做出格式修改。 如图,设计需要这样的表单结构 这样子的话数据格式根据elememt中所要求的数据格式,应为: table...
  • 基于vue 通过数据过滤 实现表格合并

    千次阅读 2018-04-19 16:16:17
    基于vue 通过数据过滤 实现表格合并 需求 基于vue渲染的数据表格 需要对相同的列进行合并 思路 自从使用了vue,就再也不想直接操作dom节点了,所以还是对数据操作。 要合并单元格需要用到rowspan属性,...
  • 1、List数组合并 let a = [1,2,3] let b = [4,5,6] let c = […a,…b] 最后console输出数组c,c= [1,2,3,4,5,6] 对象数组合并也是如此 let a = [{ name:'a', age:'20' }]; let b = [{ name...
  • list就是后台返回的的列表数据, 此代码的需求是根据每行的其中一个字段相同来进行合并的标识,也就是在data里定义的spanArr数组 和 pos 索引 这个只是如果每行的特定字段(uld)相同合并前5列,如何想合并其他不...
  • vue+html 动态合并单元格

    千次阅读 2019-03-20 12:13:52
    因为业务需求,要把某些字段的相同数据合并在同一单元格,好吧,这又是一次烧脑的逻辑游戏,废话不多说,看招! 最终实现的效果图 思路 思路一: 对后台传回的数据进行毁尸灭迹的修改,重新创建一个data对象,后台...
  • 表格合并vue3.0+TS+vantdesginVue)
  • vue多业务线合并方案

    2018-11-26 16:27:03
    主业务线引入vue、vuex、公共方法、公共组件,并绑定到window对象,需要异步加载的子业务线通过window.XXX进行引入,不需要再次Import。 二、基础组件: 抽离与业务无关组件,如dialog、toast等。 三、异步加载:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,979
精华内容 2,791
关键字:

listlistvue合并

vue 订阅