当前位置: 首页 > news >正文

上传文件(vue3)

使用el-upload  先上传到文件服务器,生成url

然后点击确定按钮: 保存数据 

<template><el-dialog top="48px" width="500" title="新增协议" :modelValue="visible" @close="handleClose()"><div class="form-main"><el-formref="ruleFormRef":model="ruleForm"label-width="90px"class="demo-ruleForm"status-icon><el-form-itemlabel="协议名称: "prop="agreementName":rules="[{required: true,message: '请输入协议名称',trigger: 'blur'},{message: '最多20个字符',trigger: 'blur',max: 20}]"><el-input v-model="ruleForm.agreementName" placeholder="请输入协议名称" /></el-form-item><el-form-itemlabel="协议文件: "prop="fileUrl":rules="{required: true,message: '请选择协议文件',trigger: 'blur'}"><div><el-uploadref="uploadRef"class="upload-demo":on-change="beforeUpload":auto-upload="false":show-file-list="false"><template #trigger><div class="upBtn">{{ fileName == "" ? "协议文件" : fileName }}</div></template><div class="div-desc">支持上传pdf文件</div></el-upload></div></el-form-item></el-form></div><template #footer><el-button @click="handleClose()">取消</el-button><el-button type="primary" @click="confirm(ruleFormRef)">确定</el-button></template></el-dialog>
</template><script setup lang="ts">
import type { FormInstance } from "element-plus"
import { addAgreementManage } from "@/api/agreementManage"
import { uploadFile } from "@/api/common"
import { uploadCodeStr } from "@/types/common"
defineProps({visible: {type: Boolean,default: false}
})
const ruleFormRef = ref<FormInstance>()
const ruleForm = ref({agreementName: "",fileUrl: ""
}) as any
const emits = defineEmits(["closeDialog"])
const handleClose = (getData?: any) => {ruleForm.value = {agreementName: "",fileUrl: ""}fileName.value = ""nextTick(() => {ruleFormRef.value?.resetFields()})emits("closeDialog", getData ? true : false)
}
// 确定按钮
const confirm = async (formEl: FormInstance | undefined) => {if (!formEl) returnawait formEl.validate((valid, fields) => {if (valid) {addAgreementManage({agreementName: ruleForm.value.agreementName,fileUrl: ruleForm.value.fileUrl}).then((res: any) => {if (res.code == 200) {ElMessage.success(res.msg)handleClose(true)} else {ElMessage.error(res.msg)}})} else {console.log("error submit!", fields)}})
}
// 上传文件
const beforeUpload = (file: any) => {// 判断文件类型const isPDF = file.raw.type === "application/pdf"if (!isPDF) {ElMessage.error("上传文件只能是 PDF 格式!")return}const isLt2M = file.size / 1024 / 1024 < 10if (!isLt2M) {ElMessage.error("上传文件大小不能超过 10MB!")return}upload(file)
}
let fileName = ref("")
// 上传文件
const upload = async (file: any) => {try {let { code, data } = await uploadFile({multipartFile: file.raw,code: uploadCodeStr})if (code && code == 200) {ruleForm.value.fileUrl = data.relativePathnextTick(() => {ruleFormRef.value?.validate()})fileName.value = file.raw.name} else {ElMessage.error("上传失败")}} catch (error) {// ElMessage.error("上传失败")}
}
</script><style scoped lang="scss">
.form-main {.upBtn {color: #409eff;cursor: pointer;}
}
.div-desc {width: 100%;color: #909399;font-size: 12px;margin-top: -10px;
}
</style>

二 查看协议

因为是个URL 直接打开就可以

  /*** 预览协议*/const goPreview = (row: any) => {//新页面打开window.open(row.fileUrl)// window.open(configLlocation.filePathUrl + row.fileUrl)}

http://www.lryc.cn/news/505661.html

相关文章:

  • 【Win10 环境vscode配置boost】
  • 中间件 redis安装
  • [java] 简单的熔断器scala语言案例
  • 【java】序列化的种类和使用场景
  • Qt5与Qt6中的高DPI缩放属性解析
  • Mac使用总结
  • 【日期规则】EXCEl 自定义日期匹配规则,学习基础知识,自由匹配场景
  • 苹果电脑可以安装windows操作系统吗?Mac OS X/OS X/macOS傻傻分不清?macOS系统的Java支持?什么是macOS的五大API法王?
  • 芋道SpringBoot配置Maven、创建SpringBoot项目、创建Web接口、读取配置信息
  • 物理机内网穿透
  • Vue 3: 通过图片链接获取图片颜色,间接设置背景颜色
  • opencv-python的简单练习
  • 如何使用生成式AI实现跨领域内容生成
  • 【Linux】socket编程1
  • Linux文件属性 --- 七种文件类型---文件.目录、软硬链接、字符设备文件
  • Tree-of-Counterfactual Prompting for Zero-Shot Stance Detection
  • NextJs 路由管理
  • hive 小文件分析
  • 【JavaWeb后端学习笔记】WebSocket通信
  • 搭建springmvc项目
  • Springboot3.x配置类(Configuration)和单元测试
  • java后端环境配置
  • 手眼标定工具操作文档
  • WebGIS城市停水及影响范围可视化实践
  • 无管理员权限 LCU auth-token、port 获取(全网首发 go)
  • 【数字花园】数字花园(个人网站、博客)搭建经历教程
  • python模拟练习第一期
  • Xcode
  • RabbitMQ安装延迟消息插件(mq报错)
  • es 3期 第15节-词项查询与跨度查询实战运用