目录

封装代码片段语法 vue2语法

关于函数导入

1.在untils写一个pdfService.js 关于pdf预览和下载的方法

复制代码
export const previewPdf = async (record) => {
	const pdfUrln = record.url; // 直接使用 PDF 文件的 URL
	// const pdfUrln = indexConfig.VITE_GLOB_VIEW_URL + 'static/pdf/web/viewer.html?file=' + record.url;
	uni.downloadFile({
		url: pdfUrln,
		success: function(res) {

			if (res.statusCode === 200) {
				console.log('文件下载成功', res);
				let filePath = res.tempFilePath; // 确认文件路径
				uni.openDocument({
					filePath: filePath,
					fileType: 'pdf', // 明确指定为pdf文件
					success: function(res) {
						console.log("文档打开成功");
					},
					fail: function(res) {
						console.error("文档打开失败", res);
					}
				});
			} else {
				console.error('文件下载失败,状态码:', res.statusCode);
			}
		},
		fail: function(err) {
			console.error('文件下载失败', err);
		}
	});
};

export const downloadPdf = async (record) => {
	uni.showLoading({
		title: '文件下载中...',
	});
	// 使用微信小程序专用 API
	wx.downloadFile({
		url: record.url, // 这里需要是 HTTPS 地址
		success(res) {
			if (res.statusCode === 200) {
				console.log('文件下载成功,文件路径:', res.tempFilePath);
				uni.showModal({
					title: '提示',
					content: '文件下载成功,是否打开?',
					success: function(modalRes) {
						if (modalRes.confirm) {

							wx.openDocument({
								filePath: res.tempFilePath,
								showMenu: true, // 支持右上角菜单
								fileType: 'pdf', // 指定文件类型为 pdf
								success() {
									console.log('文档打开成功');
								},
								fail(err) {
									console.log('打开文档失败', err);
								}
							});
						}
					}
				});
			} else {
				console.log('文件下载失败,状态码:', res.statusCode);
			}
		},
		fail(err) {
			uni.hideLoading();
			console.log('文件下载失败', err);
		},
		complete() {
			uni.hideLoading();
		}
	});
};

2.引用

复制代码
 import { 	previewPdf,downloadPdf } from '@/utils/pdfService';

<u-modal :show="showFile" :title="getTitle" @confirm="confirm" @cancel="cancel" :asyncClose="true"
			:showCancelButton="true" :closeOnClickOverlay="true" width="590rpx">
			<view class="slot-content">
				<uni-table ref="table" border stripe emptyText="暂无更多数据">
					<!-- 表头行 -->
					<uni-tr class="custom-header">
						<uni-th align="center">附件名称</uni-th>
						<uni-th align="center">操作</uni-th>
					</uni-tr>
					<!-- 表格数据行 -->
					<uni-tr v-for="(item, index) in fileList" :key="index">
						<uni-td align="center">{{ item.fileName }}</uni-td>
						<uni-td width="300rpx" align="center">
							<a @click="previewPdf(item)">预览</a>
							<a @click="downloadPdf(item)">下载</a>
						</uni-td>
					</uni-tr>


				</uni-table>
			</view>
		</u-modal>

问题来了 报错 说我没注册 也就是说在methods里面 还要写函数

复制代码
previewPdf(record) {
	previewPdf(record)
	},
downloadPdf(record) {
	downloadPdf(record)
	},

这样子要写两遍 太麻烦了

于是有

第二种

在utils里面新建目录mixin 封装,组件中通过 Mixin 的方式使用,而不是每次都手动导入和定义方法

复制代码
// utils/PdfMixin.js
export const PdfMixin = {
  methods: {
    previewPdf(record) {
      const pdfUrl = record.url;
      uni.downloadFile({
        url: pdfUrl,
        success: function (res) {
          if (res.statusCode === 200) {
            let filePath = res.tempFilePath;
            uni.openDocument({
              filePath: filePath,
              fileType: 'pdf',
              success: function () {
                console.log("文档打开成功");
              },
              fail: function (res) {
                console.error("文档打开失败", res);
              },
            });
          } else {
            console.error("文件下载失败,状态码:", res.statusCode);
          }
        },
        fail: function (err) {
          console.error("文件下载失败", err);
        },
      });
    },

    downloadPdf(record) {
      uni.showLoading({
        title: "文件下载中...",
      });
      wx.downloadFile({
        url: record.url,
        success(res) {
          if (res.statusCode === 200) {
            uni.showModal({
              title: "提示",
              content: "文件下载成功,是否打开?",
              success: function (modalRes) {
                if (modalRes.confirm) {
                  wx.openDocument({
                    filePath: res.tempFilePath,
                    showMenu: true,
                    fileType: 'pdf',
                    success() {
                      console.log("文档打开成功");
                    },
                    fail(err) {
                      console.log("打开文档失败", err);
                    },
                  });
                }
              },
            });
          } else {
            console.log("文件下载失败,状态码:", res.statusCode);
          }
        },
        fail(err) {
          uni.hideLoading();
          console.log("文件下载失败", err);
        },
        complete() {
          uni.hideLoading();
        },
      });
    },
  },
};

引入

复制代码
	import {
		PdfMixin
	} from '@/utils/mixin/pdfMixin';

注册

复制代码
mixins: [PdfMixin], // 引入 Mixin

可以了

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
雯0609~1 天前
微信小程序:动态表格实现,表头单元格数据完全从data中获取,宽度自定义,自定义文本框,行勾选,样式效果,横向滚动表格(解决背景色不足的问题)等
微信小程序·小程序·notepad++
huidoo8882 天前
notepad++日常使用(每行开头、每行末尾增加字符串,每行中间去掉字符串)
json·notepad++
Uso_Magic3 天前
notepad++8.6.4安装及细节
notepad++
arbboter3 天前
【AI插件开发】Notepad++ AI插件开发实践(代码篇):从Dock窗口集成到功能菜单实现
人工智能·notepad++·cursor·notepad++插件开发·dock窗口集成·ai代码辅助工具·ai对话窗口
拖孩3 天前
微信小程序基于Canvas实现头像图片裁剪(上)
微信小程序·小程序·notepad++
暮雨哀尘7 天前
微信小程序开发:开发实践
开发语言·算法·微信小程序·小程序·notepad++·性能·技术选型
arbboter8 天前
【AI插件开发】Notepad++ AI插件开发实践:从Dock窗口集成到功能菜单实现
人工智能·notepad++·动态菜单·notepad++插件开发·dock窗口集成·ai代码辅助工具·ai对话窗口
web_Hsir9 天前
uniapp 微信小程序项目中 地图 map组件 滑动面板
微信小程序·uni-app·notepad++
森叶11 天前
Git Bash 设置Notepad++作为默认编辑器
git·编辑器·notepad++
暮雨哀尘11 天前
微信小程序开发:微信小程序组件应用研究
算法·微信·微信小程序·小程序·notepad++·微信公众平台·组件