Vue在線預覽excel、word、ppt等格式數據。

目錄

前言

1.安裝庫

2.預覽文件子組件代碼

3、新建store/system.ts

4、父頁面進行使用

總結


前言

?純前端處理文件預覽,包含excel、word、ppt、txt等格式,不需要后端服務器進行部署,并且內網也可以使用。

?


1.安裝

npm install @vue-office/docx @vue-office/excel @vue-office/pdf
# 或
yarn add @vue-office/docx @vue-office/excel @vue-office/pdf

2.預覽文件子組件代碼

<template><div class="fileView"><n-modal v-model:show="fileViewVisible"><n-cardstyle="width: 65%;position: fixed;top: 50px;left: 50%;transform: translateX(-50%);":title="sysStore.fileViewInfo.name":bordered="true"size="medium"role="dialog"aria-modal="true"><template #header-extra><n-button circle @click="fileViewVisible = false"><template #icon><n-icon><Close /></n-icon></template></n-button></template><div><iframev-if="sysStore.fileViewInfo.fileType === 'txt'"style="width: 100%; height: calc(100vh - 190px)":src="sysStore.fileViewInfo.viewUrl"frameborder="0"></iframe><vue-office-pdfv-if="sysStore.fileViewInfo.fileType === 'pdf'"style="width: 100%; height: calc(100vh - 180px)":src="sysStore.fileViewInfo.viewUrl"frameborder="0"></vue-office-pdf><vue-office-docxv-if="sysStore.fileViewInfo.fileType === 'doc'"style="width: 100%; height: calc(100vh - 180px)":src="sysStore.fileViewInfo.viewUrl"frameborder="0"></vue-office-docx><vue-office-excelv-if="sysStore.fileViewInfo.fileType === 'xlsx'"style="width: 100%; height: calc(100vh - 180px)":src="sysStore.fileViewInfo.viewUrl"frameborder="0"></vue-office-excel></div></n-card></n-modal></div>
</template>
<script lang="ts" setup>
import { ref } from "vue";
import useSystemStore from "@/store/system";
import { Close } from "@vicons/ionicons5";
// 引入VueOffice組件
import VueOfficeDocx from "@vue-office/docx";
import VueOfficeExcel from "@vue-office/excel";
import VueOfficePdf from "@vue-office/pdf";
// 引入相關樣式
import "@vue-office/docx/lib/index.css";
import "@vue-office/excel/lib/index.css";const sysStore = useSystemStore();const fileViewVisible = ref(false);const show = () => {fileViewVisible.value = true;
};// 監聽外部變化
watch(() => props.visible, (newVal) => {fileViewVisible.value = newValue
}, {immediate: true
})
// 暴漏show給父組件使用
defineExpose({show,
});
</script>
<style lang="less" scoped></style>

?

3、新建store/system.ts

代碼如下:

import { defineStore } from "pinia";interface State {fileViewInfo: any; // 文件預覽信息
}const useSystemStore = defineStore("system", {state: (): State => ({fileViewInfo: {},}),actions: {setFileViewInfo(val: any) {this.fileViewInfo = val;},},
});export default useSystemStore;

4、父頁面進行使用

<template><n-space class="file-view" style="gap: 8px 8px" :inline="true"><divclass="file-item"v-for="(file, index) in fileComp":key="index"@click="fileView(file)"><div class="file-icon"><img width="28" :src="file.iconIamge" alt="" /></div></div></n-space><FilePreviewDialog v-model:visible="obj.showDialog" ref="filePreviewDialogRef" />
</template>
<script lang="ts" setup>import { computed, ref } from "vue";
// 以下icon是不同后綴名的文件圖片 可要可不要
import excelImg from "@/assets/images/fileIcon/excel.png";
import pdfImg from "@/assets/images/fileIcon/pdf.png";
import wordImg from "@/assets/images/fileIcon/word.png";
import textImg from "@/assets/images/fileIcon/text.png";
import unknownImg from "@/assets/images/fileIcon/unknown.png";
import { getFileSize } from "@/utils/useFunc";
import useSystemStore from "@/store/system";
import FilePreviewDialog from "@/components/FilePreviewDialog.vue";const filePreviewDialogRef = ref<any>();
const props = defineProps({files: {type: [Object,Array],required: true,},role: {type: String,},
});// 引入vuex
const sysStore = useSystemStore();// 文件信息
const obj = reactive({showDialog: false, // 是否展示附件fileUrl: [] // 附件地址
})const getIcon = (type: string) => {type = type.toLowerCase();let fileType: "doc" | "pdf" | "xlsx" | "txt" | "" = "";let iconIamge = "";const docMap = ["doc","docx","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document",];const pdfMap = ["application/pdf", "pdf"];const xlsxMap = ["application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","xls","xlsx",];const textMap = ["txt", "text/plain", "text"];if (docMap.includes(type)) {fileType = "doc";iconIamge = wordImg;} else if (pdfMap.includes(type)) {fileType = "pdf";iconIamge = pdfImg;} else if (xlsxMap.includes(type)) {fileType = "xlsx";iconIamge = excelImg;} else if (textMap.includes(type)) {fileType = "txt";iconIamge = textImg;} else {fileType = "";iconIamge = unknownImg;}return {fileType,iconIamge: iconIamge,};
};// 獲取文件數據
const fileView = async(item) => {
const {id} = item
const res = await getPolicy(id)
const {url,name,size,mime_type} = res.data
// 這里拿到的數據:url:完整的url文件流地址// name: 文件名//size: 文件字節大小// mime_type: 文件對應的類型 譬如txt對應 text/plain
// 獲取文件后綴類型
const {fileType} = getIcon(mime_type)
const fileInfo = {name,fileType,type: mime_type,size,viewUrl: url
}// 更新文件信息sysStore.setFileViewInfo(fileInfo);
// 先關閉
obj.showDialog = false
// 確保dom更新后再次打卡
await nextTick()
obj.showDialog = true
};</script><style lang="less" scoped>
.file-view {.file-item {display: flex;align-items: center;border: 1px solid var(--baseColor);padding: 8px;cursor: pointer;min-width: 240px;max-width: 300px;border-radius: 5px;.file-icon {margin-right: 5px;}.file-info {max-width: calc(100% - 28px);.file-size {font-size: var(--fontSizeSmall);}}}
}
</style>

總結

記錄一下 希望能幫助到你

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83834.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83834.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83834.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【小沐雜貨鋪】基于Three.JS繪制太陽系Solar System(GIS 、WebGL、vue、react,提供全部源代碼)第2期

&#x1f37a;三維數字地球系列相關文章如下&#x1f37a;&#xff1a;1【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐學GIS】…

Fullstack 面試復習筆記:項目梳理總結

Fullstack 面試復習筆記&#xff1a;項目梳理總結 之前的筆記&#xff1a; Fullstack 面試復習筆記&#xff1a;操作系統 / 網絡 / HTTP / 設計模式梳理Fullstack 面試復習筆記&#xff1a;Java 基礎語法 / 核心特性體系化總結 這篇筆記主自用&#xff0c;系統地梳理一下最近…

Ubuntu Cursor升級成v1.0

0. 當前版本低 使用當前 Cursor v0.50時 GitHub Copilot Chat 打不開&#xff0c;快捷鍵也不好用&#xff0c;當看到 Cursor 升級后&#xff0c;還是蠻高興的 1. 下載 Cursor 下載地址&#xff1a;https://www.cursor.com/cn/downloads 點擊下載 Linux (x64) &#xff0c;…

float和float32有什么區別

這是一個非常重要但容易混淆的問題。我們來一步一步講清楚&#xff1a; ? 簡答&#xff1a;float 和 float32 的區別 項目float&#xff08;通用名稱&#xff09;float32&#xff08;精確定義&#xff09;含義通常指“浮點數”&#xff0c;具體精度由語言/平臺決定明確指 32 …

openvino如何在c++中調用pytorch訓練的模型

步驟1&#xff1a;將PyTorch模型轉換為ONNX格式 轉換代碼示例&#xff08;Python&#xff09; import torch import torchvision1. 加載訓練好的PyTorch模型 model torchvision.models.resnet18(pretrainedTrue) model.eval() # 設置為評估模式2. 創建虛擬輸入&#xff08…

OpenCV CUDA模塊特征檢測------創建Harris角點檢測器的GPU實現接口cv::cuda::createHarrisCorner

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數創建一個 基于 Harris 算法的角點響應計算對象&#xff0c;專門用于在 GPU 上進行高效計算。 它返回的是一個 cv::Ptrcv::cuda::Cornernes…

html文字紅色粗體,閃爍漸變動畫效果

1. 代碼 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>紅色粗體閃爍文字表格</title><s…

Springboot獨立學院資產管理系統k0o7w(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能:財務員,校級管理員,部門,部門管理員,資產類型,資產信息,資產調撥,資產申購,申購入庫,資產出庫,資產報廢,資產維修,資產盤點,維修復審 開題報告內容 基于Spring Boot的獨立學院資產管理系統開題報告 一、選題背景與意義 &#xff08;一&#xff0…

基于javaweb的SpringBoot藥房管理系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

Web前端之隱藏元素方式的區別、Vue循環標簽的時候在同一標簽上隱藏元素的解決辦法、hidden、display、visibility

MENU 標簽區別速覽詳解? v-if? v-show? :style"{ display: ... }"?? :hidden?? :style"{ visibility: ... }" 總結 標簽 <div v-for"item in list" v-if"item.isShow">{{item.name}}</div> <div v-for"it…

Kafka 安裝教程(支持 Windows / Linux / macOS)

一、下載 1、kafka官網下載地址:https://kafka.apache.org/downloads 根據實際情況下載對應的版本 2、JDK的版本最好是17+ JDK下載地址:https://www.oracle.com/java/technologies/javase/jdk17-0-13-later-archive-downloads.html 二、安裝 前置條件 安裝 Java(至少 Jav…

Linux研學-用戶解析

一 root用戶 1 介紹 root是Linux系統中唯一的超級管理員賬戶&#xff0c;擁有系統的最高權限&#xff08;UID0&#xff09;&#xff0c;可執行任何操作&#xff0c;包括修改系統文件、安裝/卸載軟件、管理用戶權限等。 ??如普通用戶無法在根目錄下創建文件&#xff0c;而roo…

設計模式系列(07):建造者模式(Builder)

本文為設計模式系列第7篇&#xff0c;聚焦創建型模式中的建造者模式&#xff0c;涵蓋定義、原理、實際業務場景、優缺點、最佳實踐及詳細代碼示例&#xff0c;適合系統學習與實戰應用。 目錄 1. 模式概述2. 使用場景3. 優缺點分析4. 實際應用案例5. 結構與UML類圖6. 代碼示例7…

HBuilder 發行Android(apk包)全流程指南

一、前言 小程序以其便捷性和輕量性受到越來越多開發者的青睞。HBuilder 作為一款強大的開發工具&#xff0c;為小程序開發提供了極大的便利。本文將詳細介紹如何通過 HBuilder 完成小程序的開發與發行。 二、環境準備 1. 安裝 HBuilder 訪問 DCloud 官方網站&#xff0c;下…

React 18新特性介紹

React 18是React團隊于2022年發布的一個重要版本&#xff0c;它引入了多項改進和新特性&#xff0c;在提升性能的同時也帶來了一些使用上的變化。本文將全面介紹React 18的主要新特性&#xff0c;包括并發渲染、API更新、瀏覽器兼容性等重要內容&#xff0c;并通過代碼示例說明…

設計模式——面向對象設計六大原則

摘要 本文詳細介紹了設計模式中的六大基本原則&#xff0c;包括單一職責原則、開放封閉原則、里氏替換原則、接口隔離原則、依賴倒置原則和合成復用原則。每個原則都通過定義、理解、示例三個部分進行闡述&#xff0c;旨在幫助開發者提高代碼的可維護性和靈活性。通過具體代碼…

使用 So-VITS-SVC 實現明星聲音克隆與視頻音軌替換實戰全流程

本文展示如何使用開源項目 so-vits-svc 實現聲音克隆與視頻音軌替換流程&#xff0c;適用于 AI 音頻工程、聲音合成等學習場景。所述內容僅限技術交流&#xff0c;禁止用于非法用途。 一、項目背景 此項目采用 so-vits-svc 4.1 開源框架&#xff0c;實現了“用明星聲音替換視頻…

【學習記錄】深入解析 AI 交互中的五大核心概念:Prompt、Agent、MCP、Function Calling 與 Tools

&#x1f4cc; 引言 隨著大語言模型&#xff08;LLM&#xff09;的發展&#xff0c;AI 已經不再只是“回答問題”的工具&#xff0c;而是可以主動執行任務、調用外部資源、甚至構建完整工作流的智能系統。 為了更好地理解和使用這些能力&#xff0c;我們需要了解 AI 交互中幾…

紋理壓縮格式優化

?? Unity 項目紋理壓縮格式優化終極指南 ——不同平臺、不同手機型號,如何正確選擇 ?? 什么是紋理壓縮(Texture Compression)? Texture壓縮 = 減小顯存占用,提升加載速度,減輕GPU負擔紋理是游戲中最大資源,占用50%+內存正確壓縮:減少GPU Bandwidth,提高渲染性能錯…

Docker輕松搭建Neo4j+APOC環境

Docker輕松搭建Neo4jAPOC環境 一、簡介二、Docker部署neo4j三、Docker安裝APOC插件四、刪除數據庫/切換數據庫 一、簡介 Neo4j 是一款高性能的 原生圖數據庫&#xff0c;采用 屬性圖模型 存儲數據&#xff0c;支持 Cypher查詢語言&#xff0c;適用于復雜關系數據的存儲和分析。…