上传文件(vue3)

server/2024/12/19 8:18:20/

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

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

javascript"><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 直接打开就可以

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


http://www.ppmy.cn/server/151395.html

相关文章

Group FLUX - User Usage Survey Report

文章目录 User Feedback Summary: Software Advantages and FeaturesUser Feedback Issues and Suggested Improvements1. Security Concerns:Improvement Measures: 2. System Performance and Loading Speed:Improvement Measures: 3. Data Display Issues:Improvement Measu…

随手记:小程序兼容后台的wangEditor富文本配置链接

场景&#xff1a; 在后台配置wangEditor富文本&#xff0c;可以文字配置链接&#xff0c;图片配置链接&#xff0c;产生的json格式为&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…

RadiAnt DICOM - 基本主题 :从 PACS 服务器打开研究

正版序列号获取&#xff1a;https://r-g.io/42ZopE RadiAnt DICOM Viewer PACS 客户端功能允许您从 PACS 主机&#xff08;图片存档和通信系统&#xff09;搜索和下载研究。 在开始之前&#xff0c;您需要确保您的 PACS 服务器和 RadiAnt 已正确配置。有关配置说明&#xff0c…

Vite系列课程 | 6. Vite 的依赖预加载和预构建,7. Vite 配置文件处理细节

6. Vite 的依赖预加载和预构建 Vite 能够显著提升开发体验的关键特性之一就是其依赖预加载和预构建机制。 6.1 依赖预加载与路径处理 当我们使用 ES 模块导入依赖时&#xff0c;例如&#xff1a; import Vue from vue; import someModule from ./some-module.js;Vite 在构建…

docker 拉取镜像 | 创建容器 | 容器运行

拉取镜像 拉取镜像的命令&#xff1a;docker pull name &#xff08;name换为你要拉取的镜像名&#xff09; docker pull docker.1panel.live/hispark/qiankunbp:1.0.0 docker.1panel.live/hispark/qiankunbp:1.0.0为镜像名 拉取海思的镜像&#xff1a;&#xff08;如果之前拉…

Spring Framework 路径遍历漏洞复现(CVE-2024-38819)

hu0x01 产品描述: Spring Framework 是一个功能强大的 Java 应用程序框架,旨在提供高效且可扩展的开发环境。它结合了轻量级的容器和依赖注入功能,提供了一种使用 POJO 进行容器配置和面向切面的编程的简单方法,以及一组用于AOP的模块。0x02 漏洞描述: Spring Framework 存…

XXE-Lab for PHP

进入环境 出现一个登录页面&#xff0c;输入任意 UserName 和 Psaaword &#xff0c;使用bp抓取登录数据包 发送到重放器&#xff0c;点击“发送” 只修改 username 的值&#xff0c;查看右边的变化 只修改 password 的值&#xff0c;查看右边的变化 修改 username 和 password…

java二分查找算法详解

二分查找遵循分治策略&#xff0c;在升序排列的有序数组中查找元素。核心是反复减半搜索区间&#xff0c;先确定中间元素并与目标元素比较&#xff0c;若相等则查找成功返回其索引&#xff1b;若中间元素大于目标元素&#xff0c;就把搜索区间缩小到左半部分&#xff08;更新右…