首页 > 其他分享 >封装 luckysheet 组件

封装 luckysheet 组件

时间:2023-11-22 12:55:15浏览次数:30  
标签:luckysheet 封装 excelHeader excelData 数组 组件 return data

一维数组和二维数组

根据 luckysheet.getAllSheets() 获得所有的数据表数组,其中:

  1. cellData 是 一维数组
  2. data 是二维数组

image

image

image

代码

父组件
<template>
  <div class="app-container" v-hasPermi="['proMana:directory:detail:proHome']">
    <!-- 项目首页, projectId: {{ projectId }}, menuProjectId:{{ menuProjectId }}, menuProjectName: {{menuProjectName}} -->
    <el-button @click="getLuckySheetData">保存</el-button>
    <lucky-sheet
      ref="luckySheetRef"
      :sheet-params="luckysheetData"
      @get-luckysheet-data="receiveSheetData"
    />
  </div>
</template>

<script>
import { mapGetters } from "vuex";
import LuckySheet from "@/components/LuckySheet/index.vue";

export default {
  name: "ProIndex",
  components: {
    LuckySheet,
  },
  computed: {
    projectId() {
      return this.$route.query.projectId;
    },
    ...mapGetters(["menuProjectId", "menuProjectName"]),
  },
  data() {
    return {
      luckysheetData: {
        excelHeader: [],
        excelData: {},
      },
    };
  },
  created() {
    this.loadSheetData();
  },
  methods: {
    // 加载表数据
    loadSheetData() {
      this.luckysheetData = {
        excelHeader: ["姓名", "年龄", "性别"],
        excelData: {
          姓名: ["张三", "赵兰", "李四"],
          年龄: ["18", "17", "20"],
          性别: ["男", "女", "男"],
        },
      };
    },
    // 获取表数据
    getLuckySheetData() {
      this.$refs.luckySheetRef.getSheetData();
      console.log(this.luckysheetData);
    },
    // 接收修改后的表数据
    receiveSheetData({ excelHeader, excelData }) {
      this.$set(this.luckysheetData, "excelHeader", excelHeader);
      this.$set(this.luckysheetData, "excelData", excelData);
    },
  },
};
</script>

<style lang="scss" scoped></style>

子组件
<template>
  <div class="lucky-sheet">
    <div id="luckysheet" class="luckysheet-content"></div>
  </div>
</template>

<script>
export default {
  name: "LuckySheet",
  props: {
    sheetParams: {
      type: Object,
      default: () => {},
    },
  },
  data() {
    return {
      luckysheetOption: {
        container: "luckysheet", //luckysheet为容器id
        title: "test",
        lang: "zh",
        // plugins: ["chart"],
        showtoolbar: false,
        showsheetbar: false,
        showinfobar: false,
        showstatisticBar: false,
      },
    };
  },
  mounted() {
    this.initLuckysheet(this.sheetParams);
  },
  methods: {
    // 初始化
    initLuckysheet(data) {
      var that = this;
      const { excelHeader, excelData } = data;
      if (excelHeader.length !== 0 && JSON.stringify(excelData) != "{}") {
        // luckysheet 钩子函数
        that.luckysheetOption.hook = {
          workbookCreateAfter: function () {
            that.dataRendSheet(excelHeader, excelData);
          },
        };
      }
      luckysheet.create(that.luckysheetOption);
    },
    // 回显数据
    dataRendSheet(excelHeader, excelData) {
      //回显表格表头,第一行
      if (!excelHeader.length) return;
      excelHeader.forEach((item1, index1) => {
        luckysheet.setCellValue(0, index1, item1);
        //普通回显数据
        if (JSON.stringify(excelData) == "{}") return;
        excelData[item1].forEach((item2, index2) => {
          var row = index2 + 1;
          luckysheet.setCellValue(row, index1, item2);
        });
      });
    },
    // 获取表格数据
    getSheetData() {
      luckysheet.exitEditMode(); // 退出编辑模式
      // 转换数据
      const cellData = luckysheet.getAllSheets()[0].celldata; // 第一个sheet的一维数组
      // 表头数组
      const excelHeader = cellData
        .filter((item1) => item1.r === 0)
        .map((ele) => ele.v.m || null);

      // 表格数据
      let excelData = {};
      excelHeader.forEach((item2, index2) => {
        let arr = cellData
          .filter((item3) => item3.c === index2)
          .map((e) => e.v.m || null);
        arr.shift();
        excelData[item2] = arr;
      });
      this.$emit("get-luckysheet-data", { excelHeader, excelData });
    },
  },
};
</script>

<style lang="scss" scoped>
.luckysheet-content {
  margin: 0px;
  padding: 0px;
  position: absolute;
  width: 100%;
  height: 90%;
  left: 0px;
  top: 60px;
}
</style>

参考链接

C 多维数组

标签:luckysheet,封装,excelHeader,excelData,数组,组件,return,data
From: https://www.cnblogs.com/shayloyuki/p/17848350.html

相关文章

  • 16、Flutter Wrap组件 实现流布局
    Wrap可以实现流布局,单行的Wrap跟Row表现几乎一致,单列的Wrap则跟Column表现几乎一致。但Row与Column都是单行单列的,Wrap则突破了这个限制,mainAxis上空间不足时,则向crossAxis上去扩展显示。 Wrap组件的使用//自定义按钮组件classMyAppextendsStatelessWidget{String......
  • 简单的低开编辑器(二):实现组件拖拽
    好家伙, 0.代码已开源Fattiger4399/lowcode-demo:一个简单的低代码编辑器技术栈:Vue3element-plusjsx(github.com)该章实现的效果:组件从物料区到画布的拖拽 1.分析  先来分析,鼠标点击物料区的某个组件,再将其拖拽到画布这个过程我们如何实现组件的拖拽??......
  • 如何优雅的使用微信小程序的wx.request请求(封装request.js工具类)
    首先官方的文档不是支持Promise风格的请求我们通过官方文档可以看到微信小程序发请求的一些具体参数,下面的代码展示了用wx.request()发送的一个标准请求:wx.request({     url:"https://xxx.com",     method:"POST",     data:{   ......
  • 15、Flutter 按钮组件
    按钮组件的属性ButtonStylee里面的常用的参数 ElevatedButtonElevatedButton即"凸起"按钮,它默认带有阴影和灰色背景。按下后,阴影会变大classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){......
  • 【快应用】快应用学习之兄弟组件通信
    ​【关键词】兄弟组件通信、Publish/Subscribe模式 【实现方案】这里介绍利用框架本身提供的事件绑定接口来模拟Publish/Subscribe模式实现兄弟组件通信的方法。一、实现步骤及代码1、一个、customEventInVm2(当然也可以定义Pub端如sendMsg)<template><divclass="tutor......
  • 【HarmonyOS】低代码平台组件拖拽使用技巧之页签容器
    ​【关键字】HarmonyOS、低代码平台、Tabs、TabContent、页签导航 1、写在前面前面几篇分别介绍了低代码平台中的堆叠容器、滚动容器、网格布局等三种容器的使用,实际开发中我们经常会有这样的需求,页面底部是三个Tab按钮点击时会分别切换不同的视图内容,本篇我们就来介绍低代码......
  • 【HarmonyOS】低代码平台组件拖拽使用技巧之列表
    ​【关键字】HarmonyOS、低代码平台、组件拖拽、列表、列表项 1、写在前面我们在日常开发中使用最多的组件可能就是列表组件了,现在几乎所有的应用都离不开列表,那么今天我们就来介绍一下如何利用低代码平台来实现列表的展示,列表实际上也是容器的一种,需要注意的是,列表是需要结......
  • 【HarmonyOS】低代码平台组件拖拽使用技巧之常用基础组件(上)
    ​【关键字】HarmonyOS、低代码平台、组件拖拽、常用基础组件、基础容器 1、写在前面之前是花了一些时间介绍了在低代码平台中滚动容器、网格布局、页签容器、列表这几种容器的拖拽技巧及使用方法,今天我会继续来介绍咱们在应用开发中可能会经常用到的一些基础容器和基础组件,......
  • IndexedDB设计及封装
    设计思路固定数据表键值对表用于存储数据库相关的信息库字段构成表储存非固定数据表结构非固定数据表通过库字段构成表进行创建或更新划重点数据库初始创建或更新后会先触发onupgradeneeded方法,然后再触发onsuccess方法,如果在onupgradeneeded方法中执行了表结构操作的......
  • vue3 ts 父子 组件小例子
    <project-tabref="projectTabRef"v-model="form.projectVO":data="parentToChild"@update="updateHandler"></project-tab>//引用组件constProjectTab=defineAsyncComponent(()=>import('./tabsProject.......