vue项目中引入Luckysheet

news2024/11/19 15:34:38

Luckysheet 介绍

Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。

实现功能

格式设置

  • 样式 (修改字体样式,字号,颜色或者其他通用的样式)
  • 条件格式 (突出显示所关注的单元格或单元格区域;强调异常值;使用数据栏、色阶和图标集(与数据中的特定变体对应)直观地显示数据)
  • 文本对齐及旋转
  • 支持文本的截断、溢出、自动换行
  • 数据类型
    • 货币, 百分比, 数字, 日期
    • Custom (和excel保持一致,例如: ##,###0.00 , $1,234.56$##,###0.00_);[Red]($##,###0.00), _($* ##,###0.00_);_(...($* "-"_);_(@_), 08-05 PM 01:30MM-dd AM/PM hh:mm )
  • 单元格内多样式 (Alt+Enter单元格内换行、上标、下标、单元格内可定义每个文字的不同样式)

单元格

  • 拖拽选取来修改单元格 (对选区进行操作,可以拖动四边来移动选区,也可以在右下角对选区进行下拉填充操作)
  • 选区下拉填充 (对于一个1,2,3,4,5的序列,将会按照间隔为1进行下拉填充,而对2,4,6,8将会以2作为间隔。支持等差数列,等比数列,日期,周,天,月,年,中文数字填充)
  • 自动填充选项 (下拉填充后,会出现填充选项的菜单,支持选择复制,序列,仅格式,只填充格式,天,月,年的选择)
  • 多选区操作 (可以按住Ctrl键进行单元格多选操作,支持多选区的复制粘贴)
  • 查找和替换 (对内容进行查找替换,支持正则表达式,整词,大小写敏感)
  • 定位 (可以根据单元格的数据类型进行自动定位并选中,选中后可以批量进行格式等操作)
  • 合并单元格
  • 数据验证(表单功能) (支持Checkbox, drop-down list, datePicker)

行和列操作

  • 隐藏,插入,删除行或列
  • 冻结行或列 (支持冻结首行和首列,冻结到选区,冻结调节杆可以进行拖动操作)
  • 文本分列 (可以把文本根据不同符号进行拆分,和excel的分列功能类似)

操作体验

  • 撤销/恢复

  • 复制/粘贴/剪切操作 (支持Luckysheet到excel和excel到Luckysheet带格式的互相拷贝)

  • 快捷键支持 (快捷键操作保持与excel一致)

    快捷键功能
    CTRL + C复制单元格
    CTRL + V粘贴单元格
    CTRL + X剪切单元格
    CTRL + Z撤销
    CTRL + Y重做
    CTRL + A全选
    CTRL + B加粗
    CTRL + F查找
    CTRL + H替换
    CTRL + I斜体
    CTRL + UP/DOWN/LEFT/RIGHT快捷调整单元格选框
    SHIFT + UP/DOWN/LEFT/RIGHT调整选区
    CTRL + 鼠标左击多选单元格
    SHIFT + 鼠标左击调整选区
    UP/DOWN/LEFT/RIGHT移动单元格选框
    ENTER编辑单元格
    TAB向右移动单元格选框
    DELETE清除单元格数据
  • 格式刷 (与google sheet类似)

  • 任意选区拖拽 (选择单元格,输入公式,插入图表,会与选区相关,可以通过任意拖动和放大缩小选区来改变与之关联的参数)

公式和函数

  • 内置公式
    • 数学 (SUMIFS, AVERAGEIFS, SUMIF, SUM, etc.)
    • 文本 (CONCATENATE, REGEXMATCH, MID)
    • 日期 (DATEVALUE, DATEDIF, NOW, WEEKDAY, etc.)
    • 财务 (PV, FV, IRR, NPV, etc.)
    • 逻辑 (IF, AND, OR, IFERROR, etc.)
    • 查找和引用 (VLOOKUP, HLOOkUP, INDIRECT, OFFSET, etc.)
    • 动态数组 (Excel2019新函数,SORT,FILTER,UNIQUE,RANDARRAY,SEQUENCE)
  • 公式支持数组 (={1,2,3,4,5,6}, Crtl+Shift+Enter)
  • 远程公式 (DM_TEXT_TFIDF, DM_TEXT_TEXTRANK,DATA_CN_STOCK_CLOSE etc. Need remote interface, can realize complex calculation)
  • 自定义公式 (根据身份证识别年龄,性别,生日,省份,城市等. AGE_BY_IDCARD, SEX_BY_IDCARD, BIRTHDAY_BY_IDCARD, PROVINCE_BY_IDCARD, CITY_BY_IDCARD, etc. 可以任意加入自己的公式哦)

表格操作

  • 筛选 (支持颜色、数字、字符、日期的筛选)
  • 排序 (同时加入多个字段进行排序)

数据透视表

  • 字段拖拽 (操作方式与excel类似,拖动字段到行、列、数值、筛选等4个区域)
  • 聚合方式 (支持汇总、计数、去重计数、平均、最大、最小、中位数、协方差、标准差、方差等计算)
  • 筛选数据 (可对字段进行筛选后再进行汇总)
  • 数据透视表下钻 (双击数据透视表中的数据,可以下钻查看到明细,操作方式与excel一致)
  • 根据数据透视表新建图表 (数据透视表产生的数据也可以进行图表的制作)

图表

  • 支持的图表类型 (目前折线图、柱状图、面积图、条形图、饼图可以使用,散点图、雷达图、仪表盘、漏斗图正在接入,其他图表正在陆续开发中,请大家给予建议)
  • 关于图表插件 (图表使用了一个中间插件ChartMix (opens new window)(MIT协议): 目前支持ECharts,正在逐步接入Highcharts、阿里G2、amCharts、googleChart、chart.js)
  • Sparklines小图 (以公式的形式进行设置和展示,目前支持:折线图、面积图、柱状图、累积图、条形图、离散图、三态图、饼图、箱线图等)

插入对象

  • 插入图片 (支持JPG,PNG,SVG的插入、修改和删除,并且随表格的变动而产生变化)

Luckysheet专有

  • 矩阵计算 (通过右键菜单进行支持:对选区内的数据进行转置、旋转、数值计算)
  • 截图 (把选区的内容进行截图展示)
  • 复制到其他格式 (右键菜单的"复制为", 支持复制为json、array、对角线数据、去重等)

功能界面

功能界面如下:

在这里插入图片描述

在vue中引入Luckysheet

Luckysheet文档

Luckysheet社区

Luckysheet github地址

LuckySheet打包

克隆源码

克隆Luckysheet源码到本地

git clone https://github.com/dream-num/Luckysheet.git

安装依赖

npm install
npm install gulp -g  

开发

npm run dev

打包

npm run build

Luckysheet 使用步骤

1.本地引入

npm run builddist 文件夹下的所有文件复制到vue项目的public目录下,然后在index.html文件中通过相对路径引入:

<link rel='stylesheet' href='./plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='./plugins/plugins.css' />
<link rel='stylesheet' href='./css/luckysheet.css' />
<link rel='stylesheet' href='./assets/iconfont/iconfont.css' />
<script src="./plugins/js/plugin.js"></script>
<script src="./luckysheet.umd.js"></script>

2.指定一个表格容器

<div id="luckysheet" class="luckysheet-wrap"></div>

<style scoped>
.luckysheet-wrap {
  margin: 0px;
  padding: 0px;
  position: absolute;
  width: 100%;
  height: 100%;
  left: 0px;
  top: 0px;
}
</style>

3.创建一个表格

data () {
    return {
      // 配置项
      options: {
        container: 'luckysheet', // DOM容器的ID
        title: '电子表格', // 工作簿名称
        lang: 'zh', // 设定表格的语言
        showtoolbarConfig: {
          print: false,  // 工具栏隐藏打印按钮
        },
        showsheetbarConfig: {
          add: false, // 底部sheet页隐藏新增sheet按钮
          menu: false, // 底部sheet页隐藏管理按钮
        },
        sheetRightClickConfig: {
          hide: false, // 隐藏,取消隐藏
          move: false, // 向左移,向右移
        }
      }
    };
 },
mounted () {
  this.createSheet()
},
methods:{
  // 创建工作表
  createSheet () {
  	// 初始化表格
  	luckysheet.create(this.options)
  	// 获取Luckysheet表格文件的数据
  	this.sheetfile = luckysheet.getluckysheetfile()
  	// console.log(this.sheetfile)
  }
} 

Luckysheet 整体配置

基础结构

初始化表格时,可以设置一个对象 options 来自定义配置Luckysheet表格。

如下是一个简洁的配置案例:

// 配置项
const options = {
    container: 'luckysheet', // 设定DOM容器的id
    title: 'Luckysheet Demo', // 设定表格名称
    lang: 'zh' // 设定表格语言
    // 更多其他设置...
}

// 初始化表格
luckysheet.create(options)

这里的 options 配置项会作用于整个表格,单个sheet的配置则需要在 options.data 数组中,分别设置对应更详细的参数,参考工作表配置

常用配置

container

  • 类型:String
  • 默认值:“luckysheet”
  • 作用:容器的ID

title

  • 类型:String
  • 默认值:“Luckysheet Demo”
  • 作用:工作簿名称

lang

  • 类型:String
  • 默认值:“en”
  • 作用:国际化设置,允许设置表格的语言,支持简体中文(“zh”)、英文(“en”)、繁体中文(“zh_tw”)和西班牙文(“es”)

data

  • 类型:Array
  • 默认值:[{ “name”: “Sheet1”, color: “”, “status”: “1”, “order”: “0”, “data”: [], “config”: {}, “index”:0 }, { “name”: “Sheet2”, color: “”, “status”: “0”, “order”: “1”, “data”: [], “config”: {}, “index”:1 }, { “name”: “Sheet3”, color: “”, “status”: “0”, “order”: “2”, “data”: [], “config”: {}, “index”:2 }]
  • 作用:当未配置loadUrlloadSheetUrl的时候,需要手动配置传入整个客户端所有sheet数据[shee1, sheet2, sheet3],详细参数设置参见工作表配置

plugins

  • 类型:Array
  • 默认值:[]
  • 作用:配置插件,支持图表:“chart”

column

  • 类型:Number
  • 默认值:60
  • 作用:空表格默认的列数量

row

  • 类型:Number
  • 默认值:84
  • 作用:空表格默认的行数据量

showtoolbar

  • 类型:Boolean
  • 默认值:true
  • 作用:是否显示工具栏

showtoolbarConfig

  • 类型:Object

  • 默认值:{}

  • 作用:自定义配置工具栏,可以与showtoolbar配合使用,showtoolbarConfig拥有更高的优先级。

  • 示例:

    • 仅显示撤消重做和字体按钮:

      // options
      {
          showtoolbar: false,
          showtoolbarConfig:{
             undoRedo: true,
             font: true,
          }
      }
      
    • 仅隐藏图片和打印按钮:

      // options
      {
      	showtoolbar: true, // 默认就是true,可以不设置
      	showtoolbarConfig:{
      		image: false,
      		print: false,
      	}
      }
      

showsheetbar

  • 类型:Boolean
  • 默认值:true
  • 作用:是否显示底部sheet页按钮

showsheetbarConfig

  • 类型:Object

  • 默认值:{}

  • 作用:自定义配置底部sheet页按钮,可以与showsheetbar配合使用,showsheetbarConfig拥有更高的优先级。

  • 格式:

    {
        add: false, // 新增sheet  
        menu: false, // sheet管理菜单
        sheet: false // sheet页显示
    }
    
  • 示例:

    • 仅显示新增sheet按钮:

      // options
      {
          showsheetbar: false,
          showsheetbarConfig:{
          	add: true,
      	}
      }
      
    • 仅隐藏新增sheet和管理按钮:

      // options
      {
          showsheetbar: true, // 默认就是true,可以不设置
          showsheetbarConfig:{
             add: false,
             menu: false,
          }
      }
      

sheetRightClickConfig

  • 类型:Object

  • 默认值:{}

  • 作用:自定义配置sheet页右击菜单

  • 格式:

    {   
        delete: false, // 删除
        copy: false, // 复制
        rename: false, // 重命名
        color: false, // 更改颜色
        hide: false, // 隐藏,取消隐藏
        move: false, // 向左移,向右移
    }
    

钩子函数

钩子函数应用于二次开发时,会在各个常用鼠标或者键盘操作时植入钩子,调用开发者传入的函数,起到扩展Luckysheet功能的作用。

钩子函数统一配置在options.hook下,可以分别针对单元格、sheet页、表格创建配置hook。

使用案例可参考源码 src/index.html

常用钩子函数如下:

鼠标钩子

scroll

  • 类型:Function
  • 默认值:null
  • 作用:鼠标滚动事件
  • 参数:
    • {Object} [position]:
      • {Number} [scrollLeft]:横向滚动条的位置
      • {Number} [scrollTop]:垂直滚动条的位置
      • {Number} [canvasHeight]:canvas高度

工作簿

workbookCreateAfter

  • 类型:Function
  • 默认值:null
  • 作用:表格创建之后触发
  • 参数:
    • {Object} [book]: 整个工作簿的配置(options)

Luckysheet 常用 API 操作

单元格操作

getCellValue(row, column [,setting])

  • 参数

    • {Number} [row]: 单元格所在行数;从0开始的整数,0表示第一行
    • {Number} [column]: 单元格所在列数;从0开始的整数,0表示第一列
    • {PlainObject} [setting]: 可选参数
      • {String} [type]: 单元格的值类型,可以设置为原始值v或者显示值m;默认值为v,表示获取单元格的实际值
      • {Number} [order]: 工作表下标;默认值为当前工作表下标
  • 说明

    获取单元格的值。

    特殊情况,单元格格式为yyyy-MM-ddtype'v'时会强制取'm'显示值

setCellValue(row, column, value [,setting])

  • 参数

    • {Number} [row]: 单元格所在行数;从0开始的整数,0表示第一行
    • {Number} [column]: 单元格所在列数;从0开始的整数,0表示第一列
    • {Object | String | Number} [value]: 要设置的值;可以为字符串或数字,或为符合Luckysheet单元格格式的对象
    • {PlainObject} [setting]: 可选参数
      • {Number} [order]: 工作表下标;默认值为当前工作表下标
      • {Boolean} [isRefresh]: 是否刷新界面;默认为true;用于多个单元格赋值时候控制节流,前面单元格赋值的时候应设置为 false,最后一个单元格赋值时设置为true
      • {Function} [success]: 操作结束的回调函数
  • 说明

    设置某个单元格的值,也可以设置整个单元格对象,用于同时设置多个单元格属性。

    如果需要更新公式,也可以在这里赋值,Luckysheet在内部会主动把这个公式做计算并加入到公式链中,最后重刷界面。

选区操作

getRangeJson(title [,setting])

  • 参数

    • {Boolean} [title]: 是否首行为标题

      title可能的值有:

      • "true": 首行为标题
      • "false": 首行不为标题
    • {PlainObject} [setting]: 可选参数

      • {Array | Object | String} [range]: 选区范围,支持选区的格式为"A1:B2""sheetName!A1:B2"或者{row:[0,1],column:[0,1]},只能为单个选区;默认为当前选区
      • {Number} [order]: 工作表下标;默认值为当前工作表下标
  • 说明

    复制指定工作表指定单元格区域的数据,返回json格式的数据

工作表操作

getAllSheets()

  • 说明

    返回所有工作表配置,格式同工作表配置,得到的结果可用于表格初始化时作为options.data使用。

    所以此API适用于,手动操作配置完一个表格后,将所有工作表信息取出来自行保存,再用于其他地方的表格创建。如果想得到包括工作簿配置在内的所有工作簿数据,推荐使用 toJson,并且可以直接用于初始化Luckysheet。

  • 示例:

    • 取得第一个工作表的所有基本信息 luckysheet.getAllSheets()[0]

getLuckysheetfile()

  • 说明

    返回所有表格数据结构的一维数组luckysheetfile,不同于getAllSheets方法,此方法得到的工作表参数会包含很多内部使用变量,最明显的区别是表格数据操作会维护luckysheetfile[i].data,而初始化数据采用的是options.data[i].celldata,所以luckysheetfile可用于调试使用,但是不适用初始化表格。

    除此之外,加载过的工作表参数中会增加一个load = 1,这个参数在初始化数据的时候需要置为0才行。所以,将getLuckysheetfile()得到的数据拿来初始化工作簿,需要做两个工作:

    • celldata转为data,参考:transToData
    • load重置为0或者删除此字段

    现在已有getAllSheets来完成这个工作,无需再手动转化数据。

  • 示例:

    • 取得第一个工作表的所有调试信息 luckysheet.getLuckysheetfile()[0]

工作簿操作

create(options)

  • 参数

    • {Object} [options]:表格的所有配置信息
  • 说明

    初始化一个Luckysheet,可包含多个工作表

getWorkbookName([,setting])

  • 参数

    • {PlainObject} [setting]: 可选参数
      • {Function} [success]: 操作结束的回调函数
  • 说明

    获取工作簿名称

Luckysheet 自定义操作

导入JSON数据

// 导入json数据
importJson (data) {
    let range = luckysheet.getRange()
    // console.log(range)
    let row = range[0].row[0]
    let column = range[0].column[0]
    if (data.length > 0) {
        let keys = Object.keys(data[0])
        // console.log(keys)
        keys.forEach((item, index) => {
            luckysheet.setCellValue(row, column + index, item)
        })
    }
    data.forEach((item1, index1) => {
        // console.log(item1)
        let values = Object.values(item1)
        // console.log(values)
        values.forEach((item2, index2) => {
            luckysheet.setCellValue(row + 1 + index1, column + index2, item2)
        })
    })
}

sheetData是一个JSON数组,格式如下:

[
    {"年级":"初一","姓名":"李四","学号":7142,"年龄":18,"籍贯":"河北","成绩":79},
    {"年级":"初二","姓名":"王五","学号":7143,"年龄":19,"籍贯":"河北","成绩":80},
    {"年级":"初三","姓名":"李华","学号":7144,"年龄":20,"籍贯":"山东","成绩":81},
    {"年级":"初一","姓名":"赵国","学号":7145,"年龄":21,"籍贯":"河北","成绩":82},
    {"年级":"初一","姓名":"李青","学号":7146,"年龄":22,"籍贯":"河北","成绩":83},
    {"年级":"初三","姓名":"王国","学号":7147,"年龄":23,"籍贯":"山西","成绩":84},
    {"年级":"初一","姓名":"正东","学号":7148,"年龄":24,"籍贯":"四川","成绩":85},
    {"年级":"初二","姓名":"钱多","学号":7149,"年龄":25,"籍贯":"河北","成绩":86},
    {"年级":"初一","姓名":"付丽","学号":7150,"年龄":26,"籍贯":"贵州","成绩":87}
]

导出JSON数据

选中工作区,才能导出JSON数据

// 导出json数据
exportJson () {
    let jsonData = luckysheet.getRangeJson(true)
    console.log(jsonData)
}

导出csv格式

选中工作区,才能导出csv格式的数据

// 导出工作表csv格式
exportCsv () {
    let name = luckysheet.getWorkbookName()
    // console.log(name)
    let exceldata = luckysheet.getRangeJson(true)
    // console.log(exceldata)
    let data = ""
    let keys = Object.keys(exceldata[0])
    // console.log(keys)
    data = keys.join(",")
    exceldata.forEach(item => {
        let values = Object.values(item)
        // console.log(values)
        data += "\n" + values.join(",")
    })
    // console.log(data)
    // Download element
    var blob = new Blob(["\uFEFF" + data], { type: 'text/csv;charset=utf-8;' });

    // IE Compatibility
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        window.navigator.msSaveOrOpenBlob(blob, name + '.csv');
    } else {
        // Download element
        var pom = document.createElement('a');
        var url = URL.createObjectURL(blob);
        pom.href = url;
        pom.setAttribute('download', name + '.csv');
        document.body.appendChild(pom);
        pom.click();
        pom.parentNode.removeChild(pom);
    }
},

保存数据给后端接口

// 保存工作表数据
saveData () {
    let data = luckysheet.getLuckysheetfile()
    data.forEach((item, index) => {
        if (item.chart) {
            item.chart.forEach((chart, i) => {
                data[index].chart[i] = {
                    ...data[index].chart[i],
                    chartOptions: { ...chartmix.default.getChartJson(chart.chart_id) }
                }
                let div = document.getElementById(chart.chart_id + '_c');
                if (div.style) {
                    data[index].chart[i].left = parseInt(div.style.left)
                    data[index].chart[i].top = parseInt(div.style.top)
                    data[index].chart[i].width = parseInt(div.style.width)
                    data[index].chart[i].height = parseInt(div.style.height)
                }
            })
        }
    })
    console.log(data)
}

从后端接口加载数据

创建表格前,手动配置传入整个客户端所有sheet数据的options的data选项

mounted () {
    this.setData()
    // this.createSheet()
    // this.addButton()
},
methods: {
    setData () {
        this.$axios.post("/api/sheetData").then(res => {
            console.log(res)
            this.$set(this.options, "data", res.data)
            // this.options.data = res.data
            console.log(this.options.data)
            this.createSheet()
        })
    }
}

Luckysheet 性能测试

单条数据量不大的情况下,支持5000+的数据量不卡

在这里插入图片描述

Luckysheet 源码项目结构

  • src/controllers/ sheet 主要操作

    • conditionformat 条件格式
    • constant.js 页面结构html模板代码
    • controlHistory.js 撤销操作
    • dataVerificationCtrl.js 数据验证操作
    • dropCell.js 选区下拉
    • expendPlugins.js 插件扩展
    • filter.js 筛选排序
    • formulaBar.js 公示栏
    • freezen.js 行列冻结操作
    • hyperlinkCtrl.js 插入链接操作
    • ifFormulaGenerator.js if公式生成器
    • imageCtrl.js 插入图片及图片设置
    • insertFormula.js 插入函数
    • sheetmanage.js sheet操作代码
    • sheetBar.js 表格底部名称栏区域 相关事件(增、删、改、隐藏显示、颜色等等)
    • splitColumn.js 分列操作
    • toolbar.js 工具栏按钮配置
  • src/expendPlugins/ 扩展

    • chart 图表扩展
  • src/locale/ 语言包

    • zh.js 中文包
  • src/config.js 默认导出sheet创建配置信息

  • src/css/luckysheet-core.css 页面结构样式类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/409172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序(5)——如何制作好看的表格

✅ 因为 “表格” 在日常统计中无处不在&#xff0c;所以今天来做一做。但是微信小程序不支持 table 标签&#xff0c;我准备用 “上一篇——Flex布局” 学的 flex 来实现一下。 文章目录一、从“html的table”到 “微信小程序的table”二、统一格式的表格三、非统一格式的表格…

【vuex】unknown action type:home/categoryList报错

记录一下今天遇到的bug。在做项目时&#xff0c;想进行vuex模块化开发。 在src/store下暂且建了两个小仓库home和search src/store/index.js import {createStore} from vuex; // 引入小仓库 import home from /store/home/index import search from /store/search/index// 对…

vue3.0运行npm run dev 报错Cannot find module ‘node:url‘

目录 一、问题描述&#xff1a; 二、原因 三、解决方案 一、问题描述&#xff1a; 学习vue3.0&#xff08; Vue.js - 渐进式 JavaScript 框架 | Vue.js&#xff09;的时候一直使用的家里电脑&#xff0c;项目搭建运行一直没问题&#xff0c;公司近期用vue3.0写项目 npm init…

(前后端都开源)Activiti Flowable Camunda json转bpmn 仿钉钉流程设计器 vue2vue3 Ant Design Wflow-web smart-flow-design

仿钉钉流程设计器前后端源码 2022年10月17日,重磅开源! 话不多说上码云项目链接,各位觉得有帮助可以点一个star 本项目是基于这个Flowable6.7.2实现的, 后面会开一个Activiti567的分支 本项目在码云地址: Flowable-Activiti仿钉钉流程设计器前后台源码--工作流中台项目-基于…

第一次尝试制作一个钓鱼网站,小白教程,超细!

**声明&#xff1a;小白一枚&#xff0c;写下来为了记录和学习交流&#xff0c;大神不喜勿喷。 **大体思路&#xff1a;仿页面&#xff0c;社工诱导用户填写信息&#xff0c;提交传入后端&#xff0c;后端获取信息并存储&#xff0c;传回“服务器繁忙”或虚假信息并重定向到真…

js 各种时间格式的转换

js 各种时间格式的转换 时间格式示例中国标准时间Fri Mar 18 2022 14:24:45 GMT0800(中国标准时间)部分可读字符串Fri Mar 18 2022格林威治时间Fri,18 Mar 2022 06:24:45 GMT现在用的时间标准UTCFri Mar 18 2022 06:24:45 GMTIOS标准时间&#xff08;JSON时间格式&#xff09;…

Echarts常用配置项

一、常用配置项描述 title:{}//标题组件 tooltip:{},//提示框组件 yAxis:[],//y轴 xAxis:[],//x轴 legend:{},//图例组件 grid:{},//内绘网格 toolbox:{},//工具 series:[],//数据有关 calculable:true//可计…

JS高级中的constructor构造函数

1.对象原型__proto__和构造函数原型对象prototype里面都有一个constructor属性 2.constructor 称为构造函数 因为它的作用是用于new的实例对象指回构造函数本身 3.constructor 主要用于记录该对象是用于那个构造函数 它可以让原型对象prototype重新指向原来构造他的构造函数…

Vue|计算属性

1. 计算属性1.1 差值语法1.2 methods1.3 计算属性1. 计算属性 1.1 差值语法 开始前分别在项目目录创建文件夹及页面如下 需求1&#xff1a;在两个文本框中分别输入姓和名的同时需要在下方将数据进行拼接组装&#xff0c;效果如下图 如果用传统的方式来实现的话&#xff0c;需要…

vue2.x的h函数(createElement)与vue3中的h函数

1. vue2.x的 h 函数(createElement) 使用方法及介绍&#xff1a;&#xff08;参考官网提取&#xff09;h函数第一个是标签名字 或者是组件名字&#xff0c;第二个参数是配置项&#xff0c;第三个参数是 innerText &#xff0c;不会帮你转换节点&#xff0c;如果需要转换成节点…

background-size 之 背景图的尺寸设置

目录 一&#xff1a;background-size参数取值 1.0 1.1 二&#xff1a;实例分析 2.1 参数分析 2.2 代码实例分析 引&#xff1a;background-size: 没有设置任何尺寸时使用图片本身的大小&#xff0c;宽度和高度都是auto默认值 可以用px设置成具体的值&#xff0c;也可以使…

二、pytest+selenium+allure实现web ui自动化

上一章&#xff1a; 一、web ui自动化环境搭建 pytestallureselenium_傲娇的喵酱的博客-CSDN博客_pytestseleniumallure pytest二次开发相关文章&#xff1a; pytest框架二次开发之自定义注解_傲娇的喵酱的博客-CSDN博客 pytest框架二次开发之机器人报警_傲娇的喵酱的博客-…

前端面试:浅拷贝和深拷贝的区别?

前些天发现了一个巨牛的人工智能学习博客&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转 那么大家晚上好&#xff0c;我是今天晚上的主讲老师&#xff0c;我是兔哥。 我们在面试中经常会被问到浅拷贝和深拷贝的区别&#xff0c;正好群里…

百度低代码框架amis介绍及实例讲解

目录引言为什么用amis&#xff1f;官网这么说的amis不适合做什么&#xff1f;amis框架集成配置与组件概念实例&#xff1a;通过一个CRUD组件实现增删改查列表列表查询查看详情自定义操作按钮提交表单引言 目前低代码概念已经无人不知&#xff0c;随着新冠病毒的爆发&#xff0…

修改elementUI样式未生效问题(挂载到了body标签上)

修改挂载到body标签上elementUI样式问题 目录修改挂载到body标签上elementUI样式问题前言一、适用范围二、示例1.目标2.实现思路修改自带样式方法最后看效果总结前言 在使用element-ui库的时候&#xff0c;有时会需要修改它自带的css样式&#xff0c;组件模块化化编程时一般会…

【Vue3中的响应式原理】

Vue3响应式原理 在Vue2的响应式中&#xff0c;存在着新增属性&#xff0c;删除属性以及直接通过下标修改数组&#xff0c;但页面不会自动更新的问题。但是在Vue3中&#xff0c;这些问题都得以解决。 Vue2中的响应式原理 首先我们先看一下Vue2中的响应式原理&#xff0c;其次…

vantUI van-picker中的column使用,picker选择器展示对象数组里面的属性,自定义展示数据

项目场景&#xff1a; 需要VantUI实现的功能 问题描述 vant中的picker选择器&#xff0c;只能用这种数组&#xff0c;来展示数据 columns: [‘杭州’, ‘宁波’, ‘温州’, ‘绍兴’, ‘湖州’, ‘嘉兴’, ‘金华’, ‘衢州’], 往往我们的请求数据&#xff0c;都是这样的。对…

::before和::after是什么?

本文从最简单的开始&#xff0c;解释如何理解和使用::before和::after。然后再在实际使用场景中去应用它。 ::before和::after可以添加到选择器以创建伪元素的关键字。伪元素被插入到与选择器匹配的元素内容之前或之后。 content属性 1&#xff09;::before和::after下特有的c…

图文详解vue.js devtools插件使用方法

Vue.js devtools 背景简介 我们chrome插件网之前介绍过Vue.js devtools&#xff0c;是基于google chrome浏览器的一款调试vue.js应用的开发者浏览器扩展&#xff0c;可以在浏览器开发者工具下调试代码。做前端开发的IT工程师应该比较熟悉这款工具&#xff0c;可以边侧边栏窗格…

【前端写java接口】前端用java写一个简单的后端接口并和前端交互数据【以前端角度解释,详细注释,谁都看得懂】

先声明&#xff1a; 我不是做后端的&#xff0c;我是前端的&#xff0c;然后想要做一个后端的接口平常用来测试测试前端的页面&#xff0c;所以百度加上看看视频学了几天&#xff0c;简单的做一个&#xff0c;可能很多不专业的地方&#xff0c;后端小哥们别太严格哈&#xff0…