element UI之from表单功能整合(图片校验,隐藏上传按钮(限制上传数量))

    <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
                <el-form-item label="活动名称" prop="name">
                    <el-input v-model="ruleForm.name"></el-input>
                </el-form-item>
                <el-form-item label="活动区域" prop="region">
                    <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
                        <el-option label="区域一" value="shanghai"></el-option>
                        <el-option label="区域二" value="beijing"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="活动时间" required>
                    <el-col :span="11">
                        <el-form-item prop="date1">
                            <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1"
                                style="width: 100%;">
                            </el-date-picker>
                        </el-form-item>
                    </el-col>
                    <el-col class="line" :span="2">-</el-col>
                    <el-col :span="11">
                        <el-form-item prop="date2">
                            <el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;">
                            </el-time-picker>
                        </el-form-item>
                    </el-col>
                </el-form-item>
                <el-form-item label="即时配送" prop="delivery">
                    <el-switch v-model="ruleForm.delivery"></el-switch>
                </el-form-item>
                <el-form-item label="活动性质" prop="type">
                    <el-checkbox-group v-model="ruleForm.type">
                        <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
                        <el-checkbox label="地推活动" name="type"></el-checkbox>
                        <el-checkbox label="线下主题活动" name="type"></el-checkbox>
                        <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
                    </el-checkbox-group>
                </el-form-item>
                <el-form-item label="特殊资源" prop="resource">
                    <el-radio-group v-model="ruleForm.resource">
                        <el-radio label="线上品牌商赞助"></el-radio>
                        <el-radio label="线下场地免费"></el-radio>
                    </el-radio-group>
                </el-form-item>
                <el-form-item label="活动形式" prop="desc">
                    <el-input type="textarea" v-model="ruleForm.desc"></el-input>
                </el-form-item>
                <el-form-item label="活动图片" prop="first_image_url" ref="image">
                    <el-upload :multiple="false" :before-upload="beforeUploadMainImage"
                        :action="upload" :file-list="fileList" :on-success="uploadmainImageSuccess"
                        :on-remove="handleRemove" :on-preview="handlePreview" :limit="1"
                        accept=".jpg,.jpeg,.png,.gif,.JPG,.JPEG,.PNG,.GIF" list-type="picture-card"
                        :class="{hide:hideUpload}" :on-change="onChange">
                        <!-- class="avatar-uploader" -->
                        <i class="el-icon-plus avatar-uploader-icon" />
                    </el-upload>
                    <!-- 预览图片 -->
                    <el-dialog :visible.sync="pre_dialogVisible" append-to-body>
                        <img width="100%" fit="contain" :src="dialogImageUrl" alt="" />
                    </el-dialog>
                </el-form-item>
                <el-form-item label="活动图片2" prop="first_image_url_two" ref="image">
                    <el-upload :multiple="false" :before-upload="beforeUploadMainImage"
                        :action="upload" :file-list="fileList_two" :on-success="uploadmainImageSuccess"
                        :on-remove="handleRemove" :on-preview="handlePreview" :limit="1"
                        accept=".jpg,.jpeg,.png,.gif,.JPG,.JPEG,.PNG,.GIF" list-type="picture-card"
                        :class="{hide:hideUpload}" :on-change="onChange">
                        <!-- class="avatar-uploader" -->
                        <i class="el-icon-plus avatar-uploader-icon" />
                    </el-upload>
                    <!-- 预览图片 -->
                    <el-dialog :visible.sync="pre_dialogVisible" append-to-body>
                        <img width="100%" fit="contain" :src="dialogImageUrl" alt="" />
                    </el-dialog>
                </el-form-item>
                <el-form-item>
                    <div style="display: flex;">
                        <div style="margin-left: auto;">
                            <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
                            <el-button @click="resetForm('ruleForm')">重置</el-button>
                        </div>
                    </div>
                </el-form-item>
            </el-form>

        </el-dialog>
<script>
    export default {
        data() {
            var valiIcon = (rule, value, callback) => {
                if (!this.ruleForm.first_image_url) {
                    callback(new Error('请上传活动图1'))
                } else {
                    callback()
                }
            }
            var valiIcon_two = (rule, value, callback) => {
                if (!this.ruleForm.first_image_url_two) {
                    callback(new Error('请上传活动图2'))
                } else {
                    callback()
                }
            }
            return {
                url: "/user",
                name: "xiaoming",
                pwd: "123",
                pre_dialogVisible: false,
                dialogImageUrl: '',
                hideUpload: false,
                dialogVisible: true,
                ruleForm: {
                    name: '',
                    region: '',
                    date1: '',
                    date2: '',
                    delivery: false,
                    type: [],
                    resource: '',
                    desc: '',
                    first_image_url:'',                    
                    first_image_url_two:''
                },
                fileList: [{
                    name: 'food.jpeg',
                    url: 'https://img1.baidu.com/it/u=3278473749,2160149519&fm=26&fmt=auto&gp=0.jpg'
                }],
                fileList_two: [{
                    name: 'food.jpeg',
                    url: 'https://img1.baidu.com/it/u=3278473749,2160149519&fm=26&fmt=auto&gp=0.jpg'
                },{
                    name: 'food.jpeg',
                    url: 'https://img1.baidu.com/it/u=3278473749,2160149519&fm=26&fmt=auto&gp=0.jpg'
                }],
                rules: {
                    name: [{
                            required: true,
                            message: '请输入活动名称',
                            trigger: 'blur'
                        },
                        {
                            min: 3,
                            max: 5,
                            message: '长度在 3 到 5 个字符',
                            trigger: 'blur'
                        }
                    ],
                    region: [{
                        required: true,
                        message: '请选择活动区域',
                        trigger: 'change'
                    }],
                    date1: [{
                        type: 'date',
                        required: true,
                        message: '请选择日期',
                        trigger: 'change'
                    }],
                    date2: [{
                        type: 'date',
                        required: true,
                        message: '请选择时间',
                        trigger: 'change'
                    }],
                    type: [{
                        type: 'array',
                        required: true,
                        message: '请至少选择一个活动性质',
                        trigger: 'change'
                    }],
                    resource: [{
                        required: true,
                        message: '请选择活动资源',
                        trigger: 'change'
                    }],
                    desc: [{
                        required: true,
                        message: '请填写活动形式',
                        trigger: 'blur'
                    }],
                    first_image_url: [{
                        required: true,
                        validator: valiIcon
                    }],
                    first_image_url_two: [{
                        required: true,
                        validator: valiIcon_two
                    }],
                }
            }
        },
        mounted() {
            this.hideUpload = this.fileList.length >= 1;
            let str=[],str_two=[];
            //适用于点击修改页面(图片有值的情况下)
            this.fileList.map(item=>{str.push(item.url)})
            this.ruleForm.first_image_url=str.toString();
            this.fileList_two.map(item=>{str_two.push(item.url)})
            this.ruleForm.first_image_url_two=str_two.toString();
            console.log("this.ruleForm", this.ruleForm)
        },
        methods: {            
            //上传成功图片
            uploadmainImageSuccess(res) {
                this.$refs.image.clearValidate()
                this.fileList = [{
                    name: 'food.jpeg',
                    url: 'https://img1.baidu.com/it/u=3278473749,2160149519&fm=26&fmt=auto&gp=0.jpg'
                }]
            },
            handleRemove(file) {
                this.fileList = ''
                this.hideUpload = this.fileList.length >= 1;
                this.$refs.image.validate()
            },
            handlePreview(file) {
                console.log("file", file)
                this.dialogImageUrl = file.url
                this.pre_dialogVisible = true
            },
            onChange() {
                this.hideUpload = this.fileList.length >= 1;
            },
            submitForm(formName) {
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        alert('submit!');
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
            resetForm(formName) {
                this.$refs[formName].resetFields();
            }
        }
    }
</script>
    /deep/ .hide .el-upload--picture-card {
        display: none !important;
    }
//加上scope为当前页面生效

 

posted @ 2021-08-19 09:40  晨曦_yuan小海  阅读(479)  评论(0)    收藏  举报