vue:自定義驗證form表單中的數組
如圖
html寫法:
form元素: pictures
添加圖片上傳框事件:addMealImage
刪除一個圖片上傳框事件:delMealImage
div class="flex-row el-form-item-box" style="width: 100%;"> <el-form-item label="餐食主圖" prop="pictures" style="width: 100%;" :required="true"> <el-col style="margin-left: 10px; float: left; width: 100px;" v-for="(item, index) in form.pictures" :key="index"> <el-upload name="picFile" ref="resumeRefs" :headers="header" class="avatar-uploader" :action="baseURL + '/system/meal/upload/0/'+ mealId+'/'+index+''" :show-file-list="false" :auto-upload="true" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" :disabled="mealEdit"> <img v-if="form.pictures[index].mealImage" :src="form.pictures[index].mealImage" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> <span v-if="index == 0" class="add-date el-icon-circle-plus-outline" style="margin-left: 25px;" title="添加圖片" @click="addMealImage"> </span> <span v-if="index > 0" class="add-date el-icon-remove-outline" style="margin-left: 25px;" title="刪除圖片" @click="delMealImage"> </span> </el-col> </el-form-item> </div>
js部分
表單部分:給pictures初始化一個數組
// 表單參數 form: { id: null, mealName: null, mealCode: null, mealPrice: null, mealValidityStart: null, mealValidityEnd: null, flightValidityStart: null, flightValidityEnd: null, mealContent: null, mealAirport: null, mealCompany: null, mealReceiveMail: null, mealReceiveMails: [], pictures:[{mealImageType: null, mealImage: null, id: null, index:null}], //上傳圖片 delPictures: [],//刪除的圖片 },
rules部分:
pictures: [ { type: "array", validator: validateMealPicture, required: true } ],
自定義驗證部分:
validateMealPicture
const validateMealPicture = (rule,value, callback)=>{ //console.log(rule) //console.log(value) let item = value.length>0?value[0]:null; if(item==null || (item!=null && item.id==null)){ return callback(new Error("請至少上傳一個圖片")); }else{ callback(); } };