vue集成富文本和导入导出

vue 插件

集成markdown

官网:https://github.com/hinesboy/mavonEditor/blob/master/README.md

需要编辑时候

<template>
<div>
<!--    @imgAdd监听图片上传操作,配置图片上传-->
<mavon-editor v-model="content" @imgAdd="imageAdd" ref="md"></mavon-editor>
  <el-button type="primary" @click="getContent">获取</el-button>
</div>
</template>
<!--:toolbarsFlag="false" :subfield="false" defaultOpen= "preview"-->
<script>
import axios from "axios";
export default {
  name: "index",
  data(){
    return{
      content:'# fdsfsa'
    }
  },
  methods:{
    //点击上传图片则触发该方法,parms1:图片位置(第几个图片),param2:图片信息
    imageAdd(ind,$f){
      const path="http://localhost:8088"
      let data=new FormData();
      data.append("file",$f);
      axios.post(path+"/test/upload",data,{
        headers:{
          "Content-Type":"multipart/form-data"
        }
      }).then(res=>{
        const d=res.data;
        if(d.code===200){
          this.$refs.md.$img2Url(ind,path+"/img/"+d.fileName)
        }
      })

    },
    getContent(){
  		        
        //获取html信息,
      console.log(this.$refs.md.d_render)
        //获取markdown源码
      console.log(this.$refs.md.d_value)
    
    }
  }
}
</script>
预览

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qdwwSbVr-1667919023950)(C:\Users\ljj\Desktop\y1.png)]

获得提交信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CNVqf4uA-1667919023952)(C:\Users\ljj\Desktop\y2.png)]

不需要编辑,只用于用户浏览

<!--只需要配置以下参数,就只用于显示了-->
<mavon-editor v-model="content" :toolbarsFlag="false" :subfield="false" defaultOpen= "preview"></mavon-editor>
预览

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ej8dGBQ8-1667919023952)(C:\Users\ljj\Desktop\y3.png)]

导出数据

npm install vue-json-excel

在main.js中导入

import JsonExcel from 'vue-json-excel'
Vue.component('downloadExcel', JsonExcel)

在需要用到的模块中使用

  <download-excel
        class = "export-excel-wrapper"
        :data = "tableData"
        :fields = "json_fields"
        name = "测试.xls">
      <!-- 上面可以自定义自己的样式,还可以引用其他组件button -->
      <el-button type="primary" size="small" @click="exportData">导出EXCEL</el-button>
    </download-excel>

然后点击按钮,就能下载为excel文件了


导入csv

Vue项目导入导出csv文件 - 我是ed - 博客园 (cnblogs.com)

npm install papaparse      安装
  import Papa from 'papaparse'       //在需要使用的界面上导入即可

/**
        * by wjw
        * 导出指令csv文件
        */
      exportCsv(){
        var csv = Papa.unparse(导出的数据); 
        //定义文件内容,类型必须为Blob 否则createObjectURL会报错
        let content = new Blob([csv]);
        //生成url对象
        let urlObject = window.URL || window.webkitURL || window;
        let url = urlObject.createObjectURL(content);
        //生成<a></a>DOM元素
        let el = document.createElement("a");
        //链接赋值
        el.href = url;
        el.download = "文件导出.cvs";
        //必须点击否则不会下载
        el.click();
        //移除链接释放资源
        urlObject.revokeObjectURL(url);
      },

导出csv

<!--解决方案-->

<el-button type="success" @click="changeFile">导入csv</el-button>
    <input type="file" style="display: none;" ref="file" id="file" @change="inportCsv">

<script>
export default{
    
    
      changeFile(){
        document.getElementById("file").click()//模拟点击选择文件框
      },
      inportCsv(){//导入文件的代码
        const file=this.$refs.file.files[0]
        const name=file.name
      let suffix=(name.substring(name.lastIndexOf(".")).replace(".",''))
        if(suffix!=='csv'){
          return this.$message.error("只能是csv文件")
        }
        var reader = new FileReader();//获取读对象
        reader.readAsDataURL(file)//加载需要读的文件
        reader.οnlοad=()=>{
          Papa.parse(file, {//解析文件
            encoding:"utf-8",
            complete: res => {
              let data=res.data
              let d=data.filter((item,index)=>{//过滤
                return item.length===3&&index!==0;
              })
             d.map(item=>{
               let stud={"name":item[0],"age":item[1],"school":item[2]}
               this.tableData.push(stud)
             })
            }
          });
        }
      },
}
</script>

集成富文本编辑器

简单使用

​ https://www.wangeditor.com/v5/menu-config.html

​ 使用wangedito很好用

<template>
  <div style="border: 1px solid #ccc">
    <Toolbar
        style="border-bottom: 1px solid #ccc"
        :editor="editorRef"
        :defaultConfig="toolbarConfig"
        :mode="mode"
    />
    <Editor
        @onChange="changeContent"
        style="height: 500px; overflow-y: hidden;"
        v-model="valueHtml"
        :defaultConfig="editorConfig"
        :mode="mode"
        @onCreated="handleCreated"
    />
  </div>
</template>
<script setup>
import '@wangeditor/editor/dist/css/style.css' // 引入 css
import { onBeforeUnmount,ref, shallowRef ,defineEmits,onMounted} from 'vue'
import {request} from "@/utils/request";
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import pubsub from 'pubsub-js'


const emit=defineEmits()
// 编辑器实例,必须用 shallowRef
    const editorRef = shallowRef()
    // 内容 HTML
    const valueHtml =ref('')
    const toolbarConfig = {}
    const editorConfig = { placeholder: '请输入内容...',MENU_CONF:{}}

    editorConfig.MENU_CONF['uploadImage']={
      // 自定义上传
        async customUpload(file, insertFn) {                   // JS 语法
        // file 即选中的文件
          let d=new FormData()
          d.append("file",file)
          const{data:data}=await request.post("/upload",d)
          insertFn('http://localhost'+data.data.url,'','')
      }

    }
    //订阅,清除信息
onMounted(()=>{
  pubsub.subscribe("clear",(name,v)=>{
    valueHtml.value=v
  })
})
    //编辑框发生变化时候
const changeContent=()=>{
    emit("change",valueHtml.value)//将最新的编辑框的信息发送到父组件
}
    // 组件销毁时,也及时销毁编辑器
    onBeforeUnmount(() => {
      const editor = editorRef.value
      if (editor == null) return
      editor.destroy()
    })

    const handleCreated = (editor) => {
      editorRef.value = editor // 记录 editor 实例,重要!
    }

</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue中要实现导出Excel文本的换行,可以通过在文本内容中添加换行符(`\n`)来实现。 例如,假设我们有一个包含多行文本的数据数组。我们可以使用`map`方法遍历数组,对每个文本进行处理,将每行文本的末尾添加`\n`换行符。 具体代码如下: ``` exportToExcel() { // 假设有一个包含文本的数组 const data = [ { text: '第一行文本' }, { text: '第二行文本' }, { text: '第三行文本' }, ]; // 将每个文本的末尾添加换行符 const textWithLineBreak = data.map(item => item.text + '\n'); // 创建一个CSV格式的字符串 const csvContent = 'data:text/csv;charset=utf-8,' + textWithLineBreak.join(''); // 创建一个链接,并模拟点击下载 const encodedUri = encodeURI(csvContent); const link = document.createElement('a'); link.setAttribute('href', encodedUri); link.setAttribute('download', 'data.csv'); document.body.appendChild(link); link.click(); } ``` 这段代码首先将每个文本的末尾添加了`\n`换行符,并将其保存在`textWithLineBreak`数组中。然后,通过将这个数组使用`join`方法连接成一个CSV格式的字符串。 接下来,代码创建了一个链接,并设置链接的`href`属性为这个CSV字符串的编码URI,设置链接的`download`属性为要导出的Excel文本的文件名(此处为`data.csv`)。 最后,将链接添加到文档中,并模拟点击下载链接,实现Excel文本的导出。 这样,导出的Excel文本中的每行文本就会自动换行显示。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值