比较完整的upload上传 页面完整代码

<template>
    <el-dialog
    :title="editFlag?'资产修改':'资产新增'"
    :visible.sync="visible"
    :close-on-click-modal='false'
    width="60%"
    top='4vh'
    >
    <a-spin :spinning='loading' tip='数据加载中...'>
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
            <el-form-item label="资产名称" class="w3" prop="assetName">
                <el-input v-model="ruleForm.assetName" placeholder="请输入资产名称"></el-input>
            </el-form-item>
            <el-form-item label="资产编号" class="w3" prop="assetCode">
                <el-input v-model="ruleForm.assetCode" placeholder="请输入资产编号"></el-input>
            </el-form-item>        
            <el-form-item label="资产类型" class="w3" prop="assetType">
                <el-select v-model="ruleForm.assetType" class="w-full" placeholder="请选择资产类型">
                    <el-option v-for="(item,index) in typeList" :key='index' :label="item.labelName" :value="item.labelName"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="设备IP" class="w3" prop="ip">
                <el-input v-model="ruleForm.ip" placeholder="请输入设备IP"></el-input>
            </el-form-item>
            <el-form-item label="资产状态" class="w3" prop="status">
                <el-select v-model="ruleForm.status"  class="w-full" placeholder="请选择资产状态">
                    <el-option v-for="(item,index) in statusList" :key="index" :label="item.label" :value="item.value"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="资产品牌" class="w3" prop="brand">
                <el-input v-model="ruleForm.brand" placeholder="请输入资产品牌"></el-input>
            </el-form-item>
            <el-form-item label="采购金额(元)" class="w3" prop="money">
                <el-input-number v-model="ruleForm.money" style="width:100%" placeholder="请输入采购金额(元)"></el-input-number>
            </el-form-item>
            <el-form-item label="管理人" class="w3" prop="manager">
                <el-input v-model="ruleForm.manager" placeholder="请输入管理人名称"></el-input>
            </el-form-item>
            <el-form-item label="使用人" class="w3" prop="belongs">
                <el-input v-model="ruleForm.belongs" placeholder="请输入使用人名称"></el-input>
            </el-form-item>
            <el-form-item label="联系人" class="w3" prop="contact">
                <el-input v-model="ruleForm.contact" placeholder="请输入联系人名称"></el-input>
            </el-form-item>
            <el-form-item label="联系方式" class="w3" prop="phone">
                <el-input v-model="ruleForm.phone" placeholder="请输入联系方式"></el-input>
            </el-form-item> 
            <el-form-item label="配件" class="w3" prop="otherAssetID">
                <el-select v-model="ruleForm.otherAssetID" class="w-full" placeholder="请选择配件资产">
                    <el-option v-for="(item,index) in otherList" :key='index' :label="item.assetName" :value="item.id"></el-option>
                </el-select>
            </el-form-item>          
            <el-form-item label="备注" class="w3" prop="mark">
                <el-input type="textarea" v-model="ruleForm.mark" placeholder="请输入备注"></el-input>
            </el-form-item>
            <el-form-item label="上传合同" class="w5" >
                <el-upload
                    class="upload-demo"
                    accept=".jpg, .png, .pdf"
                    ref="upload"
                    action=""
                    drag
                    :auto-upload="true"
                    :file-list="fileList"
                    :http-request="uploadHttpRequest"
                    :on-success='uploadSuccess'
                    :on-remove="handleRemove"
                    :on-change="upload_change"
                    :on-error='uploadError'
                    :show-file-list="true"
                    multiple>
                    <i class="el-icon-upload"></i>
                    <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
                    <div class="el-upload__tip" slot="tip">只能上传jpg/png/pdf文件</div>
                </el-upload>
            </el-form-item>
        </el-form>
    </a-spin>
    <span slot="footer" class="dialog-footer">
        <el-button @click="close('ruleForm')">取 消</el-button>
        <el-button type="primary" @click="submitForm('ruleForm')">{{editFlag?'确定修改':'确定'}}</el-button>
    </span>
    </el-dialog>
</template>
<script>
export default {
    data(){
        return{
            visible:false,
            ruleForm: {
                assetName: '',
                assetCode:'',
                assetType:"",
                ip:'',
                status:'',
                brand:"",
                money:'',
                manager: '',
                belongs: '',
                contact: '',
                phone:"",
                otherAssetID: '',
                createTime: '',
                updateTime:'',
                mark: '',
            },
            fileList:[],
            formData: null,
            statusList:[
                {
                    label:'在用',
                    value:1
                },{
                    label:'空闲',
                    value:2
                },{
                    label:'报废',
                    value:3
                },{
                    label:'租用',
                    value:4
                }
            ],
            typeList:[],
            otherList:[],
            rules: {
                assetName: [
                    { required: true, message: '请输入资产名称', trigger: 'blur' },
                ],
                assetCode: [
                    { required: true, message: '请输入资产编号', trigger: 'blur' },
                ],
                assetType: [
                    { required: true, message: '请输入资产类型', trigger: 'change' },
                ],
                status: [
                    { required: true, message: '请输入资产状态', trigger: 'change' },
                ],
                manager: [
                    { required: true, message: '请输入管理人名称', trigger: 'blur' },
                ],
                contact: [
                    { required: true, message: '请输入联系人名称', trigger: 'blur' },
                ],
                phone: [
                    { required: true, message: '请输入联系方式', trigger: 'blur' },
                    { pattern: /^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$/, message: '请确保输入的电话号码规范!', trigger: 'blur' }
                ],
                belongs: [
                    { required: true, message: '请输入使用人名称', trigger: 'blur' },
                ],
            },
            editFlag:false,
            loading:false,
        }
    },
    methods:{
        async show(obj){
            this.visible = true;
            this.$refs.ruleForm&&this.$refs.ruleForm.resetFields();
            this.fileList = [];
            await this.getAssetsType();
            await this.get_other_data();
            this.formData = new FormData(); 
            let arr = Object.keys(obj);
            console.log(arr,'arr')
            if(arr.length>0){
                this.editFlag = true;
                this.ruleForm = obj;
                this.get_assets_deal(obj.id);
            }else{
                this.editFlag = false;
            }
        },

        get_assets_deal(id){
            this.$api.get(`/api/assets/getAssetAgreement/${id}`)
            .then(res =>{
                let code = res.code;
                if(code ==0){
                    let data = res.data;
                    let list = data.map((item,index)=>{
                        return {
                            name:item.agreementUrl,
                            url:item.agreementUrl,
                            id:item.id,
                            raw:new File([],item.name,{})
                        }
                    })
                    this.fileList = list;
                    console.log(this.fileList,'data')
                }else{
                    this.failTit('资产合同获取失败,请稍后重试!')
                }
            })
            .catch(err =>{
                this.failTit('资产合同获取失败,请稍后重试!')
            })
        },

        //获取资产类型
        async getAssetsType(){
            return new Promise((resolve,reject)=>{
                this.loading = true;
                this.$api.get('/api/assets/getAssetType')
                .then(res =>{
                    this.loading = false;
                    let code = res.code;
                    if(code == 0){
                        this.typeList = res.data;
                        resolve( this.typeList );
                    }else{
                        this.failTit('资产类型获取失败,请稍后重试!')
                    }
                })
                .catch(err =>{
                    this.loading = false;
                    reject();
                    this.failTit('资产类型获取失败,请稍后重试!')
                })
            })            
        },

        //获取配件资产
        async get_other_data(){
            return new Promise((resolve,reject)=>{
                this.loading = true;
                this.$api.get(`/api/assets/getAllAssets`)
                .then(res =>{
                    this.loading = false;
                    let code = res.code;
                    if(code == 0){
                        let data = res.data;
                        this.otherList = data;
                        resolve(data);
                    }
                })
                .catch(err =>{
                    this.loading = false;
                    reject();
                })
            })

        },

        uploadHttpRequest(param){
            this.formData.append('files', param.file);
        },

        uploadSuccess(){
            this.$notify({
                title: '成功',
                message: '文件成功上传!',
                type: 'success'
            });
        },

        uploadError(){
            this.$notify.error({
                title: '错误',
                message: '文件上传失败,请重试!'
            });
        },

        //移除文件
        handleRemove(file,fileList){
            console.log(file,'filessslist');
            let id = file.id;
            this.deleteUpload(id);
            this.fileList = fileList;
        },

        deleteUpload(id){
            this.$api.delete(`/api/assets/deleteAgreement/${id}`)
            .then(res=>{
                let code = res.code;
                if(code == 0){
                    this.$message({
                        message: '删除成功',
                        type: 'success'
                    });
                }else{
                    this.$message.error('删除失败');
                }
            })
            .catch(err =>{
                this.$message.error('删除失败');
            })
        },

        upload_change(file,fileList){
            this.fileList = fileList;
            console.log(fileList,'filelist')
        },
        submitForm(formName) {
            this.$refs[formName].validate((valid) => {
                if (valid) {
                   if(!this.editFlag){
                       this.submitCon();
                   }else{
                       this.updateCon();
                   }
                } else {
                    console.log('error submit!!');
                    return false;
                }
            });
        },
        submitCon(){
            this.formData.append("params", new Blob([JSON.stringify( this.ruleForm )],{type: "application/json"}))
            this.$api.post('/api/assets/addAsset',this.formData)
            .then(res =>{
                let code = res.code;
                if(code == 0){
                    this.$emit('ok');
                    this.visible = false;
                    this.successTit('新增成功!')
                }else{
                    this.failTit('新增失败,请稍后重试!')
                }
            })
            .catch(err =>{
                this.failTit('新增失败,请稍后重试!')
            })
            .finally(()=>{
                this.formData.delete("params");
            })
        },

        updateCon(){
            this.formData.append("params", new Blob([JSON.stringify( this.ruleForm )],{type: "application/json"}))
            this.$api.update(`/api/assets/updateAsset/${this.ruleForm.id}`,this.formData)
            .then(res =>{
                let code = res.code;
                if(code == 0){
                    this.$emit('ok');
                    this.visible = false;
                    this.successTit('修改成功')
                }else{
                    this.failTit('修改失败,请稍后重试!')
                }
            })
            .catch(err =>{
                this.failTit('修改失败,请稍后重试!')
            })
            .finally(()=>{
                this.formData.delete("params");
            })
        },


        close(formName) {
            this.$refs[formName].resetFields();
            this.visible = false;
        },

        close(){
            this.visible = false;
        }
    }
}
</script>
<style lang="less" scoped>
.w3{
    width:30%;
    display: inline-block;
}
.w5{
    width:50%;
}
</style>
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!