el-dialog页面中的上传图片

这是一个关于Vue.js应用中创建问题反馈弹窗的示例,包括问题标题、类型、描述等输入字段,以及上传异常界面截图的功能。代码展示了如何限制上传图片数量为3张,并在超过限制时隐藏上传组件。此外,还提供了问题反馈提交后的成功提示。
摘要由CSDN通过智能技术生成

效果图如下:当上传的图片超过三个之后让文件上传添加组件隐藏
在这里插入图片描述
效果图如下:
在这里插入图片描述

完整代码:

<template>
     <div class="questionFeedbackPopover" >
          <div class="kefuBox" @click="dialogVisible=true">
            <p class="callKefu">问题反馈</p>
            <p class="kefuImg"></p>
          </div>
          <!-- 问题反馈弹窗 -->
         <el-dialog
            title="问题反馈"
            :visible.sync="dialogVisible"
            width="1143px"
            @close="handleClose">
            <div class="contentMain">
                <el-form :model="ruleForm" :rules="rules" ref="ruleForm"  class="demo-ruleForm clear">
                    <div class="leftBox">
                         <el-form-item label="问题标题" prop="questionTitle" class="questionTitle">
                            <el-input type="textarea" v-model="ruleForm.questionTitle" placeholder="请填写"></el-input>
                        </el-form-item>
                        <el-form-item label="问题类型" prop="questionType" class="radioClass">
                            <el-radio-group v-model="ruleForm.questionType">
                                <el-radio label="异常反馈"></el-radio>
                                <el-radio label="使用问题"></el-radio>
                                <el-radio label="功能建议"></el-radio>
                                <el-radio label="其他"></el-radio>
                            </el-radio-group>
                        </el-form-item>
                        <el-form-item label="问题描述" prop="questionDescription" class="questionDescription">
                            <el-input type="textarea" v-model="ruleForm.questionDescription" placeholder="请填写"></el-input>
                        </el-form-item>
                    </div>
                    <div class="rightBox">
                        <el-form-item label="项目名称" class="projectName" >
                            <el-input v-model="ruleForm.projectName" placeholder="请填写"></el-input>
                        </el-form-item >
                        <el-form-item label="异常界面地址" prop="errorPageAddress" class="errorPageAddress">
                            <el-input type="textarea" v-model="ruleForm.errorPageAddress"></el-input>
                        </el-form-item>
                        <!-- 上传图片 -->
                        <el-form-item label="上传异常界面截图"  class="errorPageImg">
                                <el-upload
                                    action="https://jsonplaceholder.typicode.com/posts/"
                                    list-type="picture-card"
                                    :on-remove="handleRemove"
                                    :on-change="handleEditChange"
                                     multiple
                                    :file-list="fileList"
                                    :limit="limitImg"
                                    :class="{hide:hideUpload}"
                                    >
                                    <i class="el-icon-plus"></i>
                                    <div class="rightButtonUpload" >
                                        <button>上传图片</button>
                                        <p>仅支持上传三张图片</p>
                                    </div>
                                </el-upload>
                                <el-dialog :visible.sync="dialogVisibleTwo">
                                        <img width="100%" :src="dialogImageUrl" alt="">
                                </el-dialog>
                                <div class="buttonImg">
                                        <el-button size="mini" style="padding-left:0">一键截图</el-button>
                                        <span>点击一键截图按钮,自动截取当前界面图片</span>
                                </div>
                            
                        </el-form-item>
                    </div>
                   
                    </el-form>
                
               
            </div>
            <span slot="footer" class="dialog-footer">
                <el-button @click="dialogVisible = false">取 消</el-button>
                <el-button type="primary" @click="handleClose();messageAlert()">提 交</el-button>
            </span>
        </el-dialog>
      </div>
</template>
<script>
export default {
    data() {
        return {
            dialogVisible: false,
            dialogImageUrl: '',
            dialogVisibleTwo: false,
            hideUpload: false,
            limitImg:3,
            fileList:[],
            ruleForm: {
                questionTitle: '',
                questionType: '使用问题',
                questionDescription: '',
                projectName: '',
                errorPageAddress: '',
            },
            rules: {
                questionTitle: [
                    { required: true, message: '请填写问题标题', trigger: 'blur' },
                    { min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur' }
                ],
                questionType: [
                    { required: true, message: '请选择问题类型', trigger: 'change' }
                ],
                questionDescription: [
                     { required: true, message: '请填写问题描述', trigger: 'blur' },
                    { min: 3, max: 35, message: '长度在 3 到 35 个字符', trigger: 'blur' }
                ],
                errorPageAddress: [
                     { required: true, message: '请填写项目名称', trigger: 'blur' },
                     { min: 3, max: 25, message: '长度在 3 到 25 个字符', trigger: 'blur' }
                ],
                type: [
                     { required: true, message: '请填写异常界面地址', trigger: 'blur' },
                     { min: 3, max: 45, message: '长度在 3 到 45 个字符', trigger: 'blur' }
                ],
                }
        }
    },
    methods: {
        handleClose() {
            this.dialogVisible = false
        },
        handleEditChange (file, fileList) {
        this.hideUpload = fileList.length >= this.limitImg;
            },
        handleRemove (file, fileList) {
            
            this.hideUpload = fileList.length >= this.limitImg
            },
        messageAlert(){
            this.$message({
                message: '恭喜你,提交成功',
                type: 'success'
            });
        }

    }
}
</script>
<style lang="scss">
.hide .el-upload--picture-card {
  display: none;
}

</style>

样式如下:

.questionFeedbackPopover {
	position: fixed;
	z-index: 999999;
	left: 10px;
	bottom: 30%;
	cursor: pointer;
	.el-dialog {
		width: 1143px !important;
	}
	.el-dialog__body {
    padding: 24px 31px;

	}
	.kefuBox {

		width: 50px;


		padding: 12px 9px;

		background: #3171FF;

		box-shadow: -3px 3px 4px 0px rgba(49, 113, 255, 0.23);

		border-radius: 2px;
		.callKefu {

			padding-bottom: 6px;

			border-bottom: 1px solid rgba(255, 255, 255, 0.26);

			color: #FFFFFF;
			font-size: 14px;

		}

		.kefuImg {

			margin: auto;

			margin-top: 11px;

			width: 25px;

			height: 23px;

			background: url(~@/ets-ui/img/questionBack.png) no-repeat;

			background-size: 100% 100%;

			background-position: 0 0;



		}

	}
	
	.contentMain {
		position: relative;
		&::after {
			content:'';
			display: block;
			width: 1px ;
			border-left: 1px solid #EEEEEE;
			height: 100%;
			position: absolute;
			top: 0;
			left: 50%;
		}
	}
	.el-form {
		// display: flex;
		// justify-content: space-between;
		position: relative;
		
		.el-form-item__label { 
			line-height: 22px;
			padding-bottom: 8px;
		}
		.el-form-item__content {
			margin-left: 0 !important;
			line-height: 22px;
		}
		.el-textarea__inner {
			resize: none;
		}
		.el-form-item {
			margin-bottom: 15px;
		}
		.el-textarea__inner:focus {
			border-color: #3271ff;
		}
		.questionTitle {
			textarea {
				height: 72px;
			}
		}
		.questionDescription {
			textarea {
				height: 162px;
			}
		}
		
	}
	.leftBox,.rightBox {
		width: 45%;
	}
	.leftBox {
		float: left;
		.radioClass {
			.el-form-item__content {
				line-height: 10px;
			}
			.el-form-item__label {
				width: 100%;
				text-align: left;
			}
		}
	}
	.rightBox {
		float: right;
		.projectName {
			input {
				height: 32px;
			}
		}
		.errorPageAddress {
			textarea {
				height: 91px;
				background: #FAFAFA;
			}
		}
		.errorPageImg {
			.el-upload--picture-card i {
				width: 16px;
				height: 16px;
			}
			.el-form-item__label {
				width: 100%;
				text-align: left;
			}
			.el-upload--picture-card {
				width: 96px;
				height: 96px;
				position: relative;
				// line-height: 96px;
			}
			.el-upload--picture-card:hover, .el-upload:focus {
				border-color: #3271ff;
				color: #3271ff;
			}
			.el-icon-plus:before {
				font-size: 16px;
			}
			.buttonImg {
				margin-top: 20px;
				button {
					background: #42D28E;
					border-radius: 2px;
					font-size: 14px;
					color: #fff;
				}
				span {
					padding-left: 10px;
				}
			}
			.el-upload-list--picture-card .el-upload-list__item {
				width: 96px;
				height: 96px;
			}
		}
		.rightButtonUpload {
			    /* float: left; */
				position: absolute;
				line-height: 10px;
				right: -151px;
				top: 0;
				button {
					margin-top: 15px;
					padding: 5px 16px 5px 35px;
					background-color: #fff;
					background-image: url(~@/ets-ui/img/up_load.png);
					background-repeat:no-repeat;
					background-size: 16px 16px;
					background-position: 16px center;
					border-radius: 2px;
					border: 1px solid rgba(0, 0, 0, 0.15);
					font-size: 14px;
					color: rgba(96,98,102,1);
				}
				p {
					padding-top: 8px;
					font-size: 14px;
					color: rgba(96,98,102,1);
				}
				
		}
		.el-icon-plus:before {
			content: "\e6d9";
			top: 50% ;
			transform: translate(-50%, -50%);
			left: 50%;
			position: absolute;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值