uniapp小程序上传pdf文件


<template><view class="mainInnBox"><view class="formBox"><!-- 注意,如果需要兼容微信小程序,最好通过setRules方法设置rules规则 --><u-form :model="form" ref="uForm" :rules="rules"><u-form-item label="故障车辆" labelWidth="80px" prop="licensePlate" borderBottom><u--input:placeholder="vehOptions.licensePlate"placeholder-style="color: #333;"disabledColor="#ffffff"border="none"inputAlign="right"disabledreadonly/></u-form-item><u-form-item label="发生时间" labelWidth="80px" prop="occurreTime" borderBottom @click="showDate = true"><!-- <span class="redStar">*</span> --><u--inputv-model.trim="form.occurreTime"placeholder="请选择发生时间"disabledColor="#ffffff"border="none"inputAlign="right"disabledreadonly/></u-form-item><u-form-item label="事件类型" labelWidth="80px" prop="typeName" borderBottom @click="showSelect = true"><!-- <span class="redStar">*</span> --><u-inputv-model="form.typeName"placeholder="请选择事件类型"disabledColor="#ffffff"border="none"inputAlign="right"disabledreadonly><!-- <template v-show="form.publishCycle" slot="suffix"><span>天</span></template> --></u-input></u-form-item><view class="form_label">描述</view><u-form-item label=" " labelWidth="0" labelPosition="top" prop="description" borderBottom><u--textareav-model.trim="form.description"border="none"placeholder="请输入描述..."placeholderStyle="#999999"maxlength="100"height="50":count="false"borderBottom/></u-form-item><view class="form_label">附件文件</view><view class="form_label_tip">文件大小不大于10M,支持PDF</view><!-- 上传文件展示 --><view class="uploadContent"><view class="uploadFileBox" v-if="pdfInfo.length!=0"><view class="uploadTexts" @click="jump(pdfInfo[0].url)">{{pdfInfo[0].name}}</view><u-icon name="close" @click="deleteFile()"></u-icon></view><view v-else class="uploadChoose" @click="selectFile()"><u-icon name="plus"></u-icon></view></view><!-- 上传文件按钮 --></u-form></view><view class="btnBox"><view class="btn" @click="submitFunc">提交</view></view><view><!-- 发生时间 --><u-datetime-picker :show="showDate" v-model="datetime" mode="datetime" @cancel="closeDate" @confirm="sureDate"></u-datetime-picker><!-- 事件类型 --><u-picker :show="showSelect" :columns="columnsSelect" keyName="label" @cancel="closeSelect" @confirm="confirmSelect"></u-picker></view><u-modal:show="successModalShow"confirmText="理赔记录"cancelText="返回首页"@confirm="confirmFunc"@cancel="cancelFunc":showConfirmButton="true":showCancelButton="true"confirmColor="#ffffff"cancelColor="#333"><view class="slot-content"><u-icon name="checkmark-circle-fill" color="#70b603" size="28" label="上报成功" labelPos="bottom" labelSize="16px" labelColor="#333"></u-icon><view style="text-align: center;padding: 30rpx 0 0; font-size: 24rpx;">出险信息已上报</view></view></u-modal></view>
</template><script>import { getToken } from '@/assets/scripts/auth'export default {data() {return {imgUrl: this.$imgUrl,recordId: '', // 保险记录idvehOptions: {},showDate: false, // 发生时间选择datetime: Number(new Date()),showSelect: false, // 事件类型选择columnsSelect: [[{label: '出险', value: 1},{label: '维修', value: 2}, {label: '理赔', value: 3}]],form: {occurreTime: '',typeName: '',description: '',},rules: {occurreTime: [{ required: true, message: '请选择发生时间', trigger: ['change']},], typeName: [{ required: true, message: '请选择事件类型', trigger: ['change']},],description: [{ required: false, message: '请输入描述', trigger: ['blur', 'change']},{ min: 1, max: 100, message: '长度在100个字符之间'},],},btnStatus: false,successModalShow: false,pdfInfo: []}},onShow() {},onLoad(option) {// 点击理赔记录-上报--跳转过来。console.log(option)this.recordId = option.recordIdthis.vehOptions = option},onReady() {this.$nextTick(()=>{//如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。this.$refs.uForm.setRules(this.rules)})},methods: {// 发生时间选择closeDate () {this.showDate = false},sureDate (e) {// console.log(e, this.value1)this.form.occurreTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')this.$refs.uForm.clearValidate('occurreTime')this.showDate = false},// 事件类型选择closeSelect() {this.showSelect = false},confirmSelect(e) {// console.log(e)this.form.type = e.value[0].valuethis.form.typeName = e.value[0].labelthis.$refs.uForm.clearValidate('typeName')this.showSelect = false},// 上传pdfselectFile(){// console.log('111', this.pdfInfo)if(this.pdfInfo.length != 0){ // this.pdfInfo 要求不可重复上传this.$toast('如果重新上传请先删除已有的附件~')return}let that = thisuni.chooseMessageFile({count: 1, //最多可以选择的文件个数,可以 1type: 'file', //所选的文件的类型,具体看官方文档extension: ['.pdf'], //文件类型, '.docx''.doc', success (res) {// console.log('上传', res)// // tempFilePath可以作为img标签的src属性显示图片const tempFilePaths = res.tempFiles[0].pathlet filename = res.tempFiles[0].name; //用于页面显示的名字// console.log(filename)// 这一步判断可以省略,如果需求没有格式要求的话if(filename.indexOf(".pdf")==-1){that.$toast('暂时仅支持pdf格式的文件')return} else if (res.tempFiles[0].size > (10 * 1024 * 1024)) { //这里限制了文件的大小和具体文件类型,如果不限制文件类型则去掉'|| filename.indexOf(".pdf") == -1'that.$toast('文件大小不能超过10MB')// wx.showToast({// title: '文件大小不能超过10MB',// icon: "none",// duration: 2000,// mask: true// })} else {// console.log("开始上传")uni.uploadFile({url: uni.$u.http.config.baseURL + 'file/upload', // '这里是您后台提供文件上传的API':上传的路径filePath: tempFilePaths, //刚刚在data保存的文件路径name: 'file', //后台获取的凭据formData:{ //如果是需要带参数,请在formData里面添加,不需要就去掉这个就可以的fileGroup: 'leasContract'},header: {'Content-Type': 'multipart/form-data','Authorization': 'Bearer ' + getToken(),},success: (uploadFileRes) => {// console.log(uploadFileRes)if (uploadFileRes.errMsg === 'uploadFile:ok') {let result = JSON.parse(uploadFileRes.data)// console.log('=====', result)that.pdfInfo.push({name: filename, url: result.data.previewUrl})that.$forceUpdate() //有时候页面渲染不上,这里强制刷新if (result.code === 200 && result.headImg) {this.$toast('保存成功')}}}})// console.log('上传到服务器')}},fail: (err) => {console.log(err, 'err');that.$forceUpdate()}})},// 删除pdfdeleteFile() {this.pdfInfo = []},// 预览pdfjump(linkUrl) {// console.log("发送跳转页面地址112:" + linkUrl)if(linkUrl){let linkUrlNew = encodeURIComponent(linkUrl)// console.log("发送跳转页面地址111:" + linkUrlNew )uni.navigateTo({url: '/subPackages/home/claim/index?url='+ linkUrlNew})}},// 提交submitFunc() {if (this.btnStatus) {return}let that = this// 限制用户多次触发this.btnStatus = truethat.$refs.uForm.validate().then(res => {let params = {recordId: that.recordId,occurreTime: that.form.occurreTime,type: that.form.type,description: that.form.description}// 附件pdfif(this.pdfInfo.length>0) {params.attachment = this.pdfInfo[0].picUrlparams.attachmentName = this.pdfInfo[0].name}console.log('提交的表单', params)uni.showLoading({title: '提交中'})this.$http.post('/mobile/leaseContract/insurance/claim', params).then((res) => {if (res.code === 200) {// console.log(res)uni.hideLoading()this.successModalShow = truesetTimeout(function() {that.btnStatus = false}, 1100)}}).catch((error) => {console.log(error)uni.hideLoading()this.$toast(error.msg)// 填好提交,但是接口报错,这里要释放按钮限制that.btnStatus = false})}).catch(errors => {// uni.$u.toast('校验失败')// 没有填写信息,就点击了提交按钮,校验不通过,然后填好信息后,再点击提交that.btnStatus = false})},// 提交成功后的弹窗cancelFunc () {this.successModalShow = false// uni.switchTab({ url: '/pages/index' })uni.redirectTo({ url: '/pages/index' })// uni.navigateBack()},confirmFunc () {this.successModalShow = falselet params = {from: 'addform',id: this.vehOptions.vehicleId,vin: this.vehOptions.vin,licensePlate: this.vehOptions.licensePlate}uni.redirectTo({ url: '/subPackages/home/record/claim' + uni.$u.queryParams(params)})},}}
</script><style scoped lang="scss">
.mainInnBox {height: 100vh;padding-top: 18rpx;padding-bottom: calc(18rpx + constant(safe-area-inset-bottom));padding-bottom: calc(18rpx + env(safe-area-inset-bottom));background: #FFFFFF;border-top: 20rpx solid #EDF1F5;.formBox {flex: 1;// background-color: #fff;padding: 0 48rpx 150rpx;.item {display: flex;flex-direction: row;padding: 28rpx 0;border-bottom: 1rpx solid #EDF1F5;position: relative;.label {font-family: PingFangSC, PingFang SC;font-weight: 400;font-size: 28rpx;color: #666666;text-align: left;font-style: normal;margin-right: 40rpx;}.inBox {flex: 1;display: flex;align-items: center;justify-content: flex-end;.input {text-align: right;color: #212121;font-family: PingFangSC, PingFang SC;font-weight: 400;font-size: 28rpx;}}&.block {flex-direction: column;border: 0;padding: 28rpx 0 0 0;.inBox {flex: 1;display: flex;align-items: center;justify-content: flex-start;border-bottom: 1rpx solid #EDF1F5;padding: 0 0 24rpx 0;.input {text-align: left;color: #212121;}}}.dateBox {position: absolute;left: 0;right: 0;top: 0;bottom: 0;z-index: 999;}.tip {font-family: PingFangSC, PingFang SC;font-weight: 400;font-size: 28rpx;color: #999999;font-style: normal;margin: 16rpx 0 20rpx 0;}.update {width: 136rpx;height: 136rpx;background: #FFFFFF;border-radius: 12rpx;border: 2rpx dashed #126DCC;}}}.form_label {color: #303133;font-size: 30rpx;padding-top: 20rpx;}.form_label_tip {font-weight: 400;font-size: 28rpx;color: #999999;}.btnBox {position: fixed;left: 0;right: 0;bottom: 0;z-index: 1;padding-top: 32rpx;padding-bottom: calc(32rpx + constant(safe-area-inset-bottom));padding-bottom: calc(32rpx + env(safe-area-inset-bottom));.btn {width: 600rpx;height: 80rpx;background: #4095FF;box-shadow: 0rpx -4rpx 20rpx 0rpx rgba(0,0,0,0.06);border-radius: 12rpx;margin: 0 auto;border-radius: 12rpx;font-family: PingFangSC, PingFang SC;font-weight: 500;font-size: 32rpx;color: #FFFFFF;line-height: 80rpx;letter-spacing: 2px;text-align: center;font-style: normal;}}
}.uploadContent {padding-top: 20rpx;.uploadFileBox {display: flex;justify-content: space-between;background: #eeeeee;padding: 18rpx 30rpx;border-radius: 4rpx;}.uploadChoose {width: 140rpx;height: 140rpx;background: #EDF1F5;display: flex;align-items: center;justify-content: center;}}
</style>
pdf.vue
<template><!-- <view>kkkk</view> --><!-- <web-view src="https://www.baidu.com/"></web-view> --><web-view :src="toUrl"></web-view>
</template><script>// import { getToken } from '@/assets/scripts/auth'export default {data() {return {toUrl: '' // http://112.17.37.24:6090/web/country_6_wechart/stealOil_heatmap.html/?token=' + getToken() + '&httpUrl=' + }},onLoad (option) {// console.log(option)this.toUrl = decodeURIComponent(option.url)}}
</script><style>
</style>
pages.json
{// 如果您是通过uni_modules形式引入uView,可以忽略此配置"easycom": {"^u-(.*)": "@/uni_modules/uview-ui/components/u-$1/u-$1.vue"},"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages{"path": "pages/index","style": {"navigationStyle": "custom","enablePullDownRefresh": true}},{"path": "pages/login/login","style": {"navigationStyle": "custom","enablePullDownRefresh": false}},{"path": "pages/home/index","style": {"navigationStyle": "custom","enablePullDownRefresh": true}},{"path": "pages/vehicles/index","style": {"navigationStyle": "custom"}},{"path": "pages/user/index","style": {"navigationBarTitleText": "我的"}},{"path": "pages/warn/index","style": {"navigationBarTitleText": "报警"}}],"subPackages": [{"root": "subPackages","pages": [{"path": "home/claim/index","style": {"navigationBarTitleText": "出险上报","enablePullDownRefresh": false}},{"path": "home/claim/pdf","style": {"navigationBarTitleText": "预览PDF","enablePullDownRefresh": false}}, ]}],"globalStyle": {"navigationBarTextStyle": "black","navigationBarTitleText": "","navigationBarBackgroundColor": "#FFF","backgroundColor": "#FFF","enablePullDownRefresh": false,"onReachBottomDistance": 100}
}
wx.chooseMessageFile 使用小程序API,要登录小程序管理后台,设置用户隐私协议:设置--基本信息--服务内容声明。
相关文章:
uniapp小程序上传pdf文件
<template><view class"mainInnBox"><view class"formBox"><!-- 注意,如果需要兼容微信小程序,最好通过setRules方法设置rules规则 --><u-form :model"form" ref"uForm" :rules&quo…...
Python酷库之旅-第三方库Pandas(036)
目录 一、用法精讲 111、pandas.Series.item方法 111-1、语法 111-2、参数 111-3、功能 111-4、返回值 111-5、说明 111-6、用法 111-6-1、数据准备 111-6-2、代码示例 111-6-3、结果输出 112、pandas.Series.xs方法 112-1、语法 112-2、参数 112-3、功能 112-…...
Python爬虫(2) --爬取网页页面
文章目录 爬虫URL发送请求UA伪装requests 获取想要的数据打开网页 总结完整代码 爬虫 Python 爬虫是一种自动化工具,用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持(如 requests、BeautifulSoup、Scrapy 等…...
【iOS】——探究isKindOfClass和isMemberOfClass底层实现
isKindOfClass 判断该对象是否为传入的类或其子类的实例 // 类方法实现,用于检查一个类是否属于另一个类或其父类链上的任何类。(BOOL)isKindOfClass:(Class)cls {// 从当前类开始,tcls将沿着元类的继承链向上遍历。for (Class tcls self->ISA(); …...
Python 热门面试题(七)
Python中如何拷贝对象?浅拷贝和深拷贝的区别是什么? 在Python中,拷贝对象是一个常见的需求,尤其是当你需要修改一个对象但又不想影响原始对象时。Python提供了几种拷贝对象的方法,其中最重要的是浅拷贝(sh…...
STM32项目分享:智能宠物喂食系统
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.com/video/BV1zy411z7…...
数据结构——栈的实现(java实现)与相应的oj题
文章目录 一 栈栈的概念:栈的实现:栈的数组实现默认构造方法压栈获取栈元素的个数出栈获取栈顶元素判断当前栈是否为空 java提供的Stack类Stack实现的接口: LinkedList也可以当Stack使用虚拟机栈,栈帧,栈的三个概念 二 栈的一些算…...
linux修改时区为CST
目录 第一步: 第二步: 第三步: 第一步: 备份原来的时区信息 [rootlocalhost ~]# mv /etc/localtime localtime.bak 第二步: 通过软链接将亚洲/上海 的时区信息 指导时区信息 [rootlocalhost ~]# ln -s /usr/share…...
【Spring Security】初识Spring Security
今天晚上因为一个项目问题,而正式开始学习Spring Security。 这个问题是“APP端的操作员应仅可查看管理后台的项目负责人分配给自己的计划”。 一、Spring Security的核心组件: Spring Security的核心组件包括:SecurityContextHolder、Auth…...
配置单区域OSPF
目录 引言 一、搭建基础网络 1.1 配置网络拓扑图如下 1.2 IP地址表 二、测试每个网段都能单独连通 2.1 PC0 ping通Router1所有接口 2.2 PC1 ping通Router1所有接口 2.3 PC2 ping通Router2所有接口 2.4 PC3 ping通Router2所有接口 2.5 PC4 ping通Router3所有接口 2.…...
SQL中的游标是什么?
在 SQL 中,游标(Cursor)是一种用于遍历结果集的数据库对象。它允许开发者在 SQL 查询的结果集中逐行或逐批处理数据。 具体来说,SQL 中的游标通常用于以下目的: 遍历结果集:当一个 SQL 查询返回多行结果时…...
7. LangChain4j如何使用统一api调用?
前言 当我们对接LangChain4j的时候,面对复杂的各种各样的大模型的api的对接,让很多开发者感到力不从心。在每个大模型的api都不一样的时候?该如何快捷的切换模型的使用呢? 这时,One-API应运而生,它以其简洁…...
RPM、YUM 安装 xtrabackup 8 (mysql 热备系列一)包含rpm安装 mysql 8 配置主从
RPM安装 percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm 官网: https://www.percona.com/ 下载地址: https://www.percona.com/downloads wget https://downloads.percona.com/downloads/percona-distribution-mysql-ps/percona-distribution-mysq…...
maven项目打成可运行的jar及pom中的依赖一同打包
maven项目打jar及pom中的依赖一同打包 最近开发中有个需求,不部署新的服务,只jar包执行 那maven项目中,代码如何以jar的方式运行、如何把代码打成jar、pom中的依赖如何与代码一同打到jar包中? 1、代码如何以jar的方式运行&…...
Gettler‘s Screep World 笔记 Ⅰ
夏促时候刚刚入坑,写个笔记叭~ 环境配置 参考 HoPGoldy 大佬的简书,先配置下开发环境 萌新去看大佬的详细教程,我这里比较简单,有前端基础的可以直接抄 VSCode 跳过 node 我配的是v18.18.2 换源 npm config set registry h…...
联合体(union)的定义以及如何与结构体(struct)不同
联合体(Union)是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。但是,在任何给定的时间点,联合体只能存储其中的一个值;这意味着联合体的大小是其最大成员的大小,因为它必须足够…...
【Spark官方文档部分翻译】RDD编程指南(RDD Programming Guide)
写在前面 内容如何选择 本翻译只翻译本人认为精华的部分,本人认为的Spark的一些核心理念,编程思想。一些特别基础的操作包括但不限于搭建环境就不在此赘述了。 配套版本 本系列基于Spark 3.3.1,Scala 2.12.10,进行翻译总结 原…...
前端八股文 $set
为什么会有$set vue2中对数组中新增的属性是监听不到的 如图 vue 插件中有但是 视图中没有刷新 解决方法 解决就是 $set() 就是在数组中新增属性的时候可以重新渲染视图 具体的写法 写法 就是 第一个 是在那个对象上新增 第二个参数 是新增的属性 第三个参数是 新增的属性…...
Connecting weaviate with langflow across docker containers
题意:在Docker容器之间连接Weaviate与Langflow 问题背景: I am trying to build a local RAG application using Langflow. For my vectore store, I want to use a local Weaviate instance, hosted in a separate docker container on the same netwo…...
【linux vim使用说明】
基本概念 提示:本文是网络资源整理 模式: vim 有多种模式,每种模式都有不同的功能。 普通模式 (Normal Mode): 默认模式,用于导航和执行命令。插入模式 (Insert Mode): 用于文本输入。可以通过按 i 进入。可视模式 (Visual Mode): 用于选择…...
别再死记硬背FIFO了!用Python模拟器带你亲手复现操作系统‘护航效应’
别再死记硬背FIFO了!用Python模拟器带你亲手复现操作系统‘护航效应’ 操作系统中的进程调度算法是计算机科学的核心概念之一,但很多初学者在学习FIFO(先进先出)算法时,往往陷入死记硬背的困境。本文将带你通过Python模…...
终局架构:指纹隔离底座 + gRPC分布式调度,重塑千万级拼多多店群RPA集群
大家好,我是林焱,一名专注电商底层业务逻辑与 RPA 自动化架构定制的独立开发者。 在前面的几篇 CSDN 专栏中,我们探讨了如何利用“指纹浏览器底层隔离”解决风控关联问题,如何利用“EDA(事件驱动)”和“CD…...
告别编译迷茫:手把手教你读懂UEFI固件开发中的DSC文件(以EDK2 vUDK2018为例)
告别编译迷茫:手把手教你读懂UEFI固件开发中的DSC文件(以EDK2 vUDK2018为例) 当你第一次打开EDK2项目中的DSC文件时,是否被那些看似杂乱无章的配置项和宏定义搞得晕头转向?作为UEFI固件开发的核心配置文件,…...
元调优技术:如何让大模型学会严谨的数学推理与验证
1. 项目概述:当大模型遇上数学题作为一名长期混迹于AI工程一线的从业者,我经常被问到:“你们搞的大模型,做做文本生成还行,真让它解个数学题,能靠谱吗?” 这个问题问到了点子上。数学推理&#…...
统一内存引擎:异构计算时代的内存管理革命
1. 项目概述:统一内存引擎的诞生背景与核心价值最近在分布式系统和数据库领域,一个名为chenxi-lee/unified-memory-engine的项目引起了我的注意。乍一看这个标题,可能会觉得它又是一个内存池或者缓存组件,但深入研究后你会发现&am…...
别再为Matlab地图发愁了!手把手教你用m_map搞定世界地图与中国省界图(附最新shp文件下载)
用m_map工具箱高效绘制专业地图:从安装到论文级可视化实战 第一次接触Matlab绘制地图时,我盯着报错信息发呆了半小时——明明按照教程操作,为什么地图显示一片空白?后来才发现是shp文件路径中多了一个空格。这种看似简单的细节&am…...
信发系统-排版/发布 配置操作教程-智慧大屏幕—东方仙盟
政务大屏幕节目管理-选择系统模板选择对应行业选择适合的模板选中你的节目点击设计设计节目直接管理/上传 资源:图片/视频/网页/文字/文档手指/鼠标选中显示区域上传资源,在右侧点击上传从资源库选择图片选择历史素材上传网站选中网页区域点击上传配置文…...
保姆级教程:彻底解决CondaHTTPError网络连接失败(附.condarc文件完整配置流程)
深度解析CondaHTTPError:从网络诊断到.condarc文件全配置指南 遇到CondaHTTPError: HTTP 000 CONNECTION FAILED错误时,很多开发者会感到束手无策。这个问题通常出现在国内网络环境下,尤其是公司内网、校园网或使用某些代理服务后。本文将带你…...
Python并发模型全景解析
Python并发模型全景解析:线程、协程、多进程与GIL深度实战 🐍 Python 的并发编程一直是个让人困惑的话题:GIL 是什么?什么时候用线程?什么时候用协程?什么时候用多进程?本文从底层原理到生产实战,彻底讲清楚 Python 的四种并发模型,附带性能对比测试和真实踩坑经验。…...
GD32F303硬件I2C实战:手把手教你用AT24C02 EEPROM存储和读取设备配置参数
GD32F303硬件I2C实战:构建工业级参数存储系统 在嵌入式设备开发中,系统参数的持久化存储是个看似简单却暗藏玄机的需求。想象一下,当你的智能温控器经历突然断电后,所有用户设置的日程和偏好全部归零——这种体验足以让产品口碑崩…...
