VUE3-form表单保存附件与基本信息

element-ui代码

<el-dialog :title="上传附件" v-model="dialogAdds.visible" width="500px" append-to-body>

<el-form-item label="唯一标识">

<dict-tag v-if="form.groupId" :options="unique_identification" :value="form.identification" />

<el-input v-else v-model="form.identification" disabled style="width:260px;" />

</el-form-item>

<el-form-item label="设备" prop="file">

<template #default>

<div>

<div>

<label for="fileUpload">

<div class="lBut"><span>选择文件</span></div>

</label>

<div class="el-upload__tip text-red">允许上传.xls .xlsx</div>

<input id="fileUpload" type="file" style="display: none;" accept=".xls,.xlsx" @change="handleFileChange" />

<div class="el-upload__tip text-red" v-if="uploadFileName">{{ uploadFileName }}</div>

</div>

</div>

</template>

</el-form-item>

</el-form>

<template #footer>

<div class="dialog-footer">

<el-button :loading="buttonLoading" type="primary" @click="submitFormMul">确 定</el-button>

<el-button @click="cancelAdds">取 消</el-button>

</div>

</template>

</el-dialog>

js代码

<script setup lang="ts">

import axios from 'axios';

const dialogAdds = reactive<DialogOption>({

visible: false,

title: ''

});

// 文件上传

const handleFileChange = (event:any) => {

if(event.target.files[0].size > 1024*1024*40){

return proxy?.$modal.msgSuccess("上传文件不能大于40M");

}

// 附件名称

uploadFileName.value=event.target.files[0].name;

form.value.file= event.target.files[0];

}

// 保存操作

const submitFormMul = ()=>{

deviceFormRef.value?.validate(async (valid: boolean) => {

if (valid) {

buttonLoading.value = true;

const result=await axios.post(import.meta.env.VITE_APP_BASE_API+'/device/device/deviceImportByExcel', form.value, {

headers: {

'Content-Type': 'multipart/form-data',

},

});

if(result.data.code==601){

proxy?.$modal.alertErrorTitle(result.data.data,"导入错误提示");

}

// 重置

uploadFileName.value='';

dialogAdds.visible = false;

buttonLoading.value = false;

}

});

}

</script>

style样式

<style>

.lBut{

width: 87px;

height: 32px;

font-size: 14px;

line-height: 1.15;

display: flex;

justify-content: center;

align-items: center;

border-radius: 4px;

padding: 8px 10px;

margin-left: 2px;

transition: all 0.5s;

white-space: nowrap;

background-color: #409eff;

color: white;

border: 1px solid #409eff;

}

</style>

结果展示

相关推荐
惊鸿一博3 小时前
图标加载方式_zeroIcon_是否加前缀mdi
开发语言·前端·javascript
你很易烊千玺3 小时前
JS 异步 从零讲(大白话 + 真实场景 + 可运行案例)
前端·javascript·vue.js
华洛5 小时前
讲讲如何在传统产品中挖掘AI需求
javascript·产品经理·产品
大家的林语冰6 小时前
CSS 已死?DOM 性能黑洞!Pretext 排版革命让你在文本间跳舞,没有 DOM 也能纵享丝滑~
前端·javascript·css
kyriewen7 小时前
用魔法打败魔法:我让AI替我去面试前端岗,AI面试官给我打了92分,还发了offer
前端·javascript·面试
Lkstar8 小时前
Vue keep-alive 原理全解:LRU 缓存策略、源码级理解
前端·vue.js·面试
ZC跨境爬虫8 小时前
跟着 MDN 学CSS day_13 :(深入理解CSS中的元素尺寸调整)
前端·javascript·css·ui·html·tensorflow
threelab9 小时前
Three.js 加载 3D Tiles 瓦片数据 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
_洋10 小时前
Three.js加载 .obj文件 和 .gltf文件
开发语言·javascript·ecmascript
梦想CAD控件10 小时前
网页端对DWG图纸进行预览与批注(CAD轻量化)
java·前端·javascript