Vue插件列表

标签: Vue 分类: Javascript 创建时间:2021-01-06 02:21:00 更新时间:2023-10-20 11:23:26

1.数据导出插件vue-json-excel

使用数据导出插件vue-json-excel,

1
2
3
4
5
6
7
8
9
10
<download-excel 
class = "export-excel-wrapper"
:data = "historyData"
:fields = "exportExportFileds"
:before-generate="exportFile"
:name = "exportFileName">
<el-button plain type="primary" class="menu-btn">
导出
</el-button>
</download-excel>

时间格式不正确

当我使用插件,将json数据导出之后,打开导出的excel之后,看到时间格式,只能显示 分钟:秒:毫秒,点击单元格之后,才能显示具体的时间 “YYYY-MM-DD HH:mm”。

解决办法就是自定义fields返回的内容,在返回之前进行时间的格式化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 导出的表格的字段配置
exportExportFileds(){
// 获取当前的表头,然后遍历,输出符合条件的对象
let exportFields={}
for(let item of this.historyHeader){
let name=item.name;
let field=item.field;
if(field=='RecordTime'||name=='时间'){
exportFields[name]={
field: field,
callback: (value) => {
let time=this.$moment(value).format("YYYY-MM-DDTHH:mm");
return time;
}
};
}else{
exportFields[name]=field;
}

}
return exportFields;
}

虽然不能像”2021-01-05 16:13”这样的标准化,但是也可以显示时间了。

其实换句话说,只要时返回的是一个字符串,那么Excel就可以不用将单元格的内容视为时间格式,所以就可以安定义的字符串进行显示,可以在时间的前面添加一个字符串,比如

数字变成了科学计数法

这里就是要修改源码,很多的文章都是引自同一篇文章,就是下面的参考文章的解决方案,我不知道哪个才是出处,在我实验的过程中,我又点不一样。我刚开始修改了源码:JsonExcel.vue中的内容,结果导出之后还是科学计数法,然后我又修改了源码目录下 dist\vue-json-excel.cjs 文件中的td标签,还是不起作用,我甚至在两个文件的相关部分进行了console输出,但是连输出都没有输出

结果我把dist文件删除了,可以看到控制台报错了,说找不到文件,所以这个时候,就知道应该改哪一个源码了。

【解决】
修改源码目录 dist\vue-json-excel.esm.js文件,大约在338行,修改后,重新编译就好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data.map(function (item, index) {
xlsData += "<tr>";
for (let key in item) {
xlsData +=
// 原代码
// "<td>" +

// 新代码
"<td style=\"mso-number-format:'\@';\">" +
_self.preprocessLongNum(
_self.valueReformattedForMultilines(item[key])
) +
"</td>";
}
xlsData += "</tr>";
});

注意
为了保持源码的整洁或是在其他的机器上编译时,不需要重新编写源码,可以将源码中的 vue-json-excel.esm.js 中的内容复制一份到项目目录下,所有的修改都在这个文件中修改,引用插件的时候,也是引用这个文件,而不是 “vue”

1
2
3
4
5
// 导出excel组件
// import JsonExcel from 'vue-json-excel';

// 自定义插件
import JsonExcel from "@lib/JsonExcel.js";

3.xlsx使用

我安装了xlsx和file-saver还有sscript-loader,借助了 Export2Excel.js 这个文件,进行了excel文件的导出

1
npm install --save xlsx file-saver

这里有个问题,就是数据量大的时候,Export2Excel就会使浏览器卡死。

【解决方法】
先借助于formatJson函数,将对象数组转化为相应的只有数据的数组,然后再导出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 将json数据转为数组
const formatJson = (headValue, jsonData) => {
return jsonData.map((v) => headValue.map((j) => v[j]))
}
// 导出表格
let date=moment().format("YYYYMMDDHHmmss");
let filename=date;
excel.export_json_to_excel({
header: tHeader, //表头 必填
data:formatJson(Object.keys(TableFileds), tData), //具体数据 必填
filename: filename, //非必填
autoWidth: true, //非必填
bookType: 'xlsx' //非必填
})
参考文章:
1.Element-ui组件库Table表格导出Excel表格_gs981600308的博客-程序员宝宝_element表格导出excel 使用了xlsx插件和file-saver,很多的文章都是和这个类似的,比如下面的参考文章2和3
2.vue3.0导出数据为excel且设置样式
3.Vue3.0 导出Excel
4.Excel 导出 这是vue-admin 使用的excel导出插件,自己在js-excel的基础上,又封装了一层,好用
5. SheetJS /sheetjs js-xlsx插件的仓库
6.vue+element将数据导出成excel表格 这里也有提到过:如果不做这一步的话,会导致list为空,而且这里会去检索require对象,甚至会使当前浏览器卡死,我的机器是工作站,但是从cpu任然飙到了80%多。

问题

(1) 无法安装xlxs
安装xlxs的时候,出现了无法安装的问题。An unexpected error occurred: “https://registry.yarnpkg.com/xlsx/-/xlsx-0.17.3.tgz: incorrect data check”. 无法进行下载了。

如果使用npm进行安装的话,会提示:No matching version found for @vue/cli-plugin-babel@~5.0.0.

我以为是我的@vue/cli没有装,于是我使用全局的安装命令安装这个

1
npm install -g @vue/cli

结果这个也装不上,报错:An unexpected error occurred: “https://registry.yarnpkg.com/@vue/cli-ui/-/cli-ui-4.5.14.tgz: incorrect data check”。我的node版本是v16.0.0 ,npm v7.10.0。

【解决方法】
后来我升级了node版本,由v16.0.0升级到了v17.0.0,也不行。最后我重新安装了node v14.18.1 长期支持版本,重新安装了vue/cli,重新构建了vue3.0的项目,最后终于可以安装xlsx了。

2.codemirror编辑插件

使用vue-codemirror不好使,还是codemirror使用记录,这个好使。

1
2
3
4
npm install codemirror
npm install jsonlint --save //npm 安装组件
npm install -D script-loader
import 'script-loader!jsonlint';

3.vue-codemirror

1
2
3
4
## 安装
npm install vue-codemirror --save
npm install jsonlint -S
npm install script-loader -S
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { codemirror } from 'vue-codemirror'

// import base style
import 'codemirror/lib/codemirror.css'
import 'codemirror/theme/blackboard.css'
import 'codemirror/mode/javascript/javascript.js'

/**配置内容**/
cmOptions: {
tabSize: 4,
mode:"text/javascript",
theme: 'blackboard',
lineNumbers: true,
line: true,
highlightDifferences:true,
// more CodeMirror options...
}, // 代码编辑器的配置

/**组件引用**/
<codemirror
ref="cmEditor"
:value="dbConfig.flow"
:options="cmOptions"
/>
参考文章:
1.vue页面使用CodeMirror,渲染json,xml格式
2.vue json 编辑组件_内置为Vue组件的Visual JSON编辑器
3.vue-json-edit (vue-json-editor的npm插件页面)
4.CodeMirror (CodeMirror官网)
5.surmon-china/vue-codemirror (vue版本的codemirror实现,star还挺多,到了1900)
6.CodeMirror—实现关键词高亮
7.使用CodeMirror插件遇到的问题 (调用refresh()刷新编辑器,可以解决模态框无法显示代码的问题,还有其他的几个问题,就是批量构造示例获取引用,粘贴复制问题等)
8.vue利用CodeMirrorr+json-lint实现可编辑可自动格式化的Json-Editor组件

代码格式化

1
2
3
4
5
6
7
8
9
10
11
12
13
let name=tab.name;
let codeM=this.$refs["cmEditor_"+name].codemirror;
let data=this.dbConfig[name]||"";
this.$nextTick(() => {
// 进行json格式化
try{
data=JSON.parse(data);
codeM.setValue(JSON.stringify(data, null, 2));
}catch{
// codeM.setValue(data);
}
codeM.refresh();
})
参考文章:
1.教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化 (这里有代码格式化问题,借助于jsonlint可以实现json的检查)
2.vue利用CodeMirrorr+json-lint实现可编辑可自动格式化的Json-Editor组件 (这里用了一个Json-Editor的插件)
3.Linter Demo (这是格式化显示的官方例子,相应的源码在lint中)

代码错误提示

进行代码格式化需要借助于插件jsonlint

1
2
3
4
5
6
7
npm install jsonlint --save  //npm 安装组件
import jsonlint from 'jsonlint' //引入
window.jsonlint = jsonlint //全局化

// 也有人通过这样引入
npm install -D script-loader
import 'script-loader!jsonlint';

但是我安装了jsonlint之后,总是提示模块不存在

于是我又安装了一个两个插件file system。安装完成之后,虽然不再提示报错了,但是还是没有错误提示

1
npm install file system --save  //npm 安装组件

经过多次尝试,最后使用vue-codemirror就是实现不了错误代码提示,所以就根据 codemirror使用记录 文章,进行了修改。直接封装了一个JsonEditor组件,没有使用vue-codemirror,我也是使用了这个实现了json格式化的提示。

参考文章:
1.codeMirror配置 (这里有很多的配置项的说明)
2.lint is not triggered on change (这里讨论为什么代码改变的时候,不能进行错误提示)
3.Dose this support Jsonlint? (这里说json-lint.js依赖 jsonlint,但是不能直接在webpack环境中使用他。但是我拷贝了jslint.js文件,然后删除了最后几行,导入项目中,还是不能出现错误提示)
4.Vue 基于vue-codemirror实现的代码编辑器 (这里直接是使用vue-codemirror实现了一个完整的代码编辑框,贴出来了主要的代码和内容)
5.Javascript codemirror 高级应用 (这有点高级了,直接写了一个编辑器)
6.【vue】项目启动报 Failed to resolve loader: script-loader You may need to install it. 问题解决

3.视频播放组件

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。