亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue3 elementplus table合并寫(xiě)法

 更新時(shí)間:2023年06月29日 10:43:19   作者:你眼中的柔情  
這篇文章主要介紹了vue3 elementplus table合并寫(xiě)法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

vue3 elementplus table合并寫(xiě)法

table表格下方合并寫(xiě)法:

1:?jiǎn)涡泻喜?/p>

(1)在標(biāo)簽中加入屬性

   :summary-method="getSummaries"
            :show-summary="true"
 <el-table
            :data="data"
            id="tableRef"
            ref="tableRef"
            row-key="belnr"
            class="td-bacg-white"
            :summary-method="getSummaries"
            :show-summary="true"
          >
            <template v-for="(item1, index1) in tableColumns">
              <template v-if="item1.children">
                <el-table-column
                  :key="index1"
                  :label="item1.title"
                  align="center"
                >
                  <template v-for="item in item1.children">
                    <el-table-column
                      v-if="!item.hidden"
                      :align="item.align || 'center'"
                      :prop="item.dataIndex"
                      :label="item.title"
                      :min-width="item.width"
                      :key="item.dataIndex"
                      :show-overflow-tooltip="
                      item.overflow === false ? false : true
                    "
                    >
                      <template #default="scope">
              <template >
                <el-table-column
                  :align="item1.align || 'center'"
                  :key="index1"
                  :prop="item1.dataIndex"
                  :label="item1.title"
                  :fixed="item1.fixed || false"
                  :min-width="item1.width"
                  show-overflow-tooltip
                >
                  <template #default="scope">
                    <span
                      v-if="item1.filterType === 'toThousandFilter'"
                    >
                    {{
                        toThousandFilter(
                          Number(scope.row[`${item1.dataIndex}`] || 0)
                        )
                      }}
                  </span>
                  <span v-else-if="item1.dataIndex === 'ii'">
                      <span>{{ scope.row[`${item1.dataIndex}`] }}%</span>
                  </span>
                    <span v-else>
                    <span>{{ scope.row[`${item1.dataIndex}`] }}</span>
                  </span>
                  </template>
                </el-table-column>
              </template>
            </template>
          </el-table>

(2)合并方法

下方判斷字段為 uu ii 的兩個(gè)字段計(jì)算合并。

/**
 * 合計(jì)
 */
interface SummaryMethodProps<T = SpmxListType> {
  columns: TableColumnCtx<T>[];
  data: T[];
}
function getSummaries(param: SummaryMethodProps) {
  const { columns, data } = param;
  const sums: string[] = [];
  columns.forEach((column, index) => {
    if (index === 1) {
      sums[index] = '合計(jì)';
      return;
    }
    if (
      column.property !== 'uu' &&
      column.property !== 'ii'
    ) {
      sums[index] = '';
      return;
    }
    const values = data.map(item => Number(item[column.property]));
    console.log(columns, '==columns');
    if (!values.every(value => isNaN(value))) {
      sums[index] = values
        .reduce((prev, curr) => {
          const value = Number(curr);
          if (!isNaN(value)) {
            return prev + curr;
          } else {
            return prev;
          }
        }, 0)
        .toString();
      sums[index] = Number(sums[index]).toFixed(2);
      if (
        column.property === 'ii'
      ) {
        // 加百分號(hào)
        sums[index] = sums[index]+'%';
      }else{
        // 加千葉符
        sums[index] = toThousandFilter(Number(sums[index]));
      }
    } else {
      sums[index] = '';
    }
  });
  console.log(sums);
  return sums;
}

2.如果下方合并是兩行的,用到Render函數(shù)

(利用render函數(shù)插入2個(gè)div作為2行展示)

function getSummaries(param: SummaryMethodProps) {
  const { columns, data } = param;
  const sums: string[] = [];
  columns.forEach((column, index) => {
    if (index === 0) {
      // sums[index] = '小計(jì) total';
      sums[index] =  h('div', {class: ''},[
        h("div", '小計(jì) total', ),
        h("div", '% of total', ),
      ]);
      // sums[index] =  <div>
      //     <div>合計(jì)</div>
      //   <div> 備注</div>
      //   </div>;
      return;
    }
    if (index === 1) {
      // sums[index] = '小計(jì) total';
      sums[index] =  h('div', {class: ''},[
        h("div", '1234567', ),
        h("br", '', ),
      ]);
      return;
    }   if (index === 2) {
      // sums[index] = '小計(jì) total';
      sums[index] =  h('div', {class: ''},[
        h("div", '100%', ),
        h("div", '12%', ),
      ]);
      return;
    }
    if (index === 3) {
      // sums[index] = '小計(jì) total';
      sums[index] =  h('div', {class: ''},[
        h("div", '1234567', ),
        h("br", '', ),
      ]);
      return;
    }
    if (index === 4) {
      // sums[index] = '小計(jì) total';
      sums[index] =  h('div', {class: ''},[
        h("div", '100%', ),
        h("div", '88%', ),
      ]);
      return;
    }
    if (
      column.property !== 'ee' &&
      column.property !== 'rr'
    ) {
      sums[index] = '';
      return;
    }
  });
  console.log(sums);
  return sums;
}

Vue3+ElementPlus實(shí)現(xiàn)Table表格的行合并(單個(gè)及多個(gè))

實(shí)現(xiàn)結(jié)果

在這里插入圖片描述

    <el-table
      border
      v-loading="state.loading"
      :data="state.tableDataList"
      :height="pagTabHeight"
      row-key="id"
      ref="tableRef"
      :highlight-current-row="true"
      @row-click="rowClick"
      :span-method="objectSpanMethod"
    >
      <el-table-column type="index" label="序號(hào)" align="center" />
      <el-table-column
        prop="level"
        label="參數(shù)級(jí)別"
        show-overflow-tooltip
        align="center"
      />
      <el-table-column
        prop="year"
        label="年度"
        show-overflow-tooltip
        align="center"
      />
      <el-table-column
        prop="type"
        label="評(píng)價(jià)類型"
        show-overflow-tooltip
        align="center"
      />
      <el-table-column
        prop="way"
        label="定額方式"
        show-overflow-tooltip
        align="center"
      />
      <el-table-column
        prop="creator"
        label="創(chuàng)建人"
        show-overflow-tooltip
        align="center"
      />
      <el-table-column label="創(chuàng)建時(shí)間" show-overflow-tooltip align="center">
        <template #default="{ row }">{{
          dateFormat(row.createTime, 'yyyy-MM-dd')
        }}</template>
      </el-table-column>
    </el-table>

實(shí)現(xiàn)方法

interface ObjInterface {
  [key: string]: any; // 字段擴(kuò)展聲明
}
/**
 * @description 合并表格行
 * @export
 * @param {object[]} data 表格數(shù)據(jù)
 * @param {string} rowName 合并行的name
 * @param {string} otherRowName 合并其他行
 * @return {*}
 */
export function tableRowMerge(
  data: ObjInterface[],
  rowName: string,
  otherRowName?: string
) {
  const idArray = [] as number[];
  let idPos = 0;
  for (let i = 0; i < data.length; i++) {
    // 如果當(dāng) i == 0 說(shuō)明數(shù)據(jù)是第一行, 需要重新賦值
    if (i == 0) {
      // idArray.push(1) 說(shuō)明這一行數(shù)據(jù)被顯示出來(lái)
      idArray.push(1);
      // idPos = 0 重置當(dāng)前的計(jì)數(shù)器
      idPos = 0;
    }
    // 說(shuō)明不是從第一行開(kāi)始遍歷的
    else {
      if (otherRowName) {
        //主行之外的 另一行合并
        if (
          data[i][rowName] == data[i - 1][rowName] &&
          data[i][otherRowName] == data[i - 1][otherRowName]
        ) {
          // 如果相同就需要將 idArray 的數(shù)據(jù)自加
          idArray[idPos] += 1;
          // 同時(shí)需要將 idArray push一個(gè)0 表示下一行不用顯示
          idArray.push(0);
        }
        // 說(shuō)明 當(dāng)前的數(shù)據(jù)和上一行的指定數(shù)據(jù)不同
        else {
          // idArray.push(1) 說(shuō)明當(dāng)前一行的數(shù)據(jù)需要顯示
          idArray.push(1);
          // 重新給計(jì)數(shù)器賦值
          idPos = i;
        }
      } else {
        // 判斷當(dāng)前的指定數(shù)據(jù)是否和之前的指定數(shù)據(jù)值相同
        if (data[i][rowName] == data[i - 1][rowName]) {
          // 如果相同就需要將 idArray 的數(shù)據(jù)自加
          idArray[idPos] += 1;
          // 同時(shí)需要將 idArray push一個(gè)0 表示下一行不用顯示
          idArray.push(0);
        }
        // 說(shuō)明 當(dāng)前的數(shù)據(jù)和上一行的指定數(shù)據(jù)不同
        else {
          // idArray.push(1) 說(shuō)明當(dāng)前一行的數(shù)據(jù)需要顯示
          idArray.push(1);
          // 重新給計(jì)數(shù)器賦值
          idPos = i;
        }
      }
    }
  }
  return idArray;
}

調(diào)用方法

let rowMergeArr = [] as number[];
let rowMergeArr1 = [] as number[];
/**
 * @description 合并行
 */
interface SpanMethodProps {
  row: PriceTableItem;
  column: TableColumnCtx<PriceTableItem>;
  rowIndex: number;
  columnIndex: number;
}
const objectSpanMethod = ({
  row,
  column,
  rowIndex,
  columnIndex
}: SpanMethodProps) => {
  // level列
  if (columnIndex === 1) {
    // rowMergeArr[rowIndex] 取出當(dāng)前存放行的合并狀態(tài)
    const rowSpan = rowMergeArr[rowIndex];
    // 判斷當(dāng)前的 列是否需要顯示
    const colSpan = rowSpan > 0 ? 1 : 0;
    return {
      rowspan: rowSpan,
      colspan: colSpan
    };
  }
  // level列之后的 type列
  if (columnIndex === 3) {
    // rowMergeArr[rowIndex] 取出當(dāng)前存放行的合并狀態(tài)
    const rowSpan = rowMergeArr1[rowIndex];
    // 判斷當(dāng)前的 列是否需要顯示
    const colSpan = rowSpan > 0 ? 1 : 0;
    return {
      rowspan: rowSpan,
      colspan: colSpan
    };
  }
  // ...如果還有繼續(xù)
};
onMounted(() => {
  rowMergeArr = tableRowMerge(state.tableDataList, 'level');// 主列的行合并
  rowMergeArr1 = tableRowMerge(state.tableDataList, 'level', 'type');// 其他列的行合并
});

到此這篇關(guān)于vue3 elementplus table合并的文章就介紹到這了,更多相關(guān)vue3 elementplus table合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue項(xiàng)目中Api的組織和返回?cái)?shù)據(jù)處理的操作

    Vue項(xiàng)目中Api的組織和返回?cái)?shù)據(jù)處理的操作

    這篇文章主要介紹了Vue項(xiàng)目中Api的組織和返回?cái)?shù)據(jù)處理的操作,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • vite build vue3項(xiàng)目配置開(kāi)啟sourcemap方式

    vite build vue3項(xiàng)目配置開(kāi)啟sourcemap方式

    這篇文章主要介紹了vite build vue3項(xiàng)目配置開(kāi)啟sourcemap方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Vue3中toRef與toRefs的區(qū)別

    Vue3中toRef與toRefs的區(qū)別

    這篇文章主要介紹了Vue3中toRef與toRefs的區(qū)別,toRefs與toRef功能一致,但可以批量創(chuàng)建多個(gè)ref對(duì)象,需要注意的是它只會(huì)解析對(duì)象的第一層屬性,語(yǔ)法直接傳入對(duì)象 toRefs,下面更多內(nèi)容的介紹需要的小伙伴可以參考一下
    2022-03-03
  • 使用vuex解決刷新頁(yè)面state數(shù)據(jù)消失的問(wèn)題記錄

    使用vuex解決刷新頁(yè)面state數(shù)據(jù)消失的問(wèn)題記錄

    這篇文章主要介紹了使用vuex解決刷新頁(yè)面state數(shù)據(jù)消失的問(wèn)題記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼

    vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼

    本文主要介紹了vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • VuePress使用Algolia實(shí)現(xiàn)全文搜索

    VuePress使用Algolia實(shí)現(xiàn)全文搜索

    這篇文章主要為大家介紹了VuePress使用Algolia實(shí)現(xiàn)全文搜索示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 在Vue3中使用vue-qrcode庫(kù)實(shí)現(xiàn)二維碼生成的方法

    在Vue3中使用vue-qrcode庫(kù)實(shí)現(xiàn)二維碼生成的方法

    在Vue3中實(shí)現(xiàn)二維碼生成需要使用第三方庫(kù)來(lái)處理生成二維碼的邏輯,常用的庫(kù)有 qrcode和 vue-qrcode,這篇文章主要介紹了在Vue3中使用vue-qrcode庫(kù)實(shí)現(xiàn)二維碼生成,需要的朋友可以參考下
    2023-12-12
  • Vue3中子組件改變父組件傳過(guò)來(lái)的值(props)的方法小結(jié)

    Vue3中子組件改變父組件傳過(guò)來(lái)的值(props)的方法小結(jié)

    在 Vue 3 中,子組件改變父組件傳過(guò)來(lái)的值(props)的方法主要有以下幾種:通過(guò)事件發(fā)射、使用 v-model、模擬 .sync 修飾符的功能(Vue 3 中已移除),以及使用 ref 或 reactive,下面我將結(jié)合代碼示例和使用場(chǎng)景詳細(xì)講解這些方法,需要的朋友可以參考下
    2025-04-04
  • Vue實(shí)現(xiàn)typeahead組件功能(非??孔V)

    Vue實(shí)現(xiàn)typeahead組件功能(非??孔V)

    本文給大家分享通過(guò)Vue寫(xiě)一個(gè)挺靠譜的typeahead組件功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-08-08
  • ant-design-vue Table pagination分頁(yè)實(shí)現(xiàn)全過(guò)程

    ant-design-vue Table pagination分頁(yè)實(shí)現(xiàn)全過(guò)程

    這篇文章主要介紹了ant-design-vue Table pagination分頁(yè)實(shí)現(xiàn)全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論