From 1ad93b699ff890327de9a65f26611e9415140600 Mon Sep 17 00:00:00 2001 From: inleft <inleft@qq.com> Date: Tue, 18 Jan 2022 01:31:56 +0800 Subject: [PATCH] 表单校验 --- src/components/mini/box10-add.vue | 124 ++++++++++++++++++++++++++++++----------- 1 files changed, 91 insertions(+), 33 deletions(-) diff --git a/src/components/mini/box10-add.vue b/src/components/mini/box10-add.vue index 8a33c45..1d314e1 100644 --- a/src/components/mini/box10-add.vue +++ b/src/components/mini/box10-add.vue @@ -1,32 +1,32 @@ <template> - <div class="myFrom"> - <a-form-model :model="form" :label-col="labelCol" :wrapper-col="wrapperCol"> - <a-form-model-item label="标题"> + <div> + <a-form-model ref="myForm" :model="form" :label-col="labelCol" :wrapper-col="wrapperCol" :rules="rules"> + <a-form-model-item label="标题" prop="title"> <a-input v-model="form.title" placeholder="限 50字内" /> </a-form-model-item> <a-form-model-item label="模式切换"> <a-switch v-model="form.online" /> <span class="myTip"> - 本地编辑/由系统生成文件 + 本地文件/由系统生成文件 </span> </a-form-model-item> - <a-form-model-item label="日志文件" v-show="!form.online"> + <a-form-model-item label="日志文件" v-show="!form.online" prop="blogFileList"> <a-upload action="https://www.mocky.io/v2/5cc8019d300000980a055e76" :default-file-list="form.blogFileList"> <a-button> - <a-icon type="upload" /> 限 md/html 文件 + <a-icon type="upload" /> 限 markdown/html </a-button> </a-upload> </a-form-model-item> - <a-form-model-item label="日志内容" v-show="form.online"> + <a-form-model-item label="日志内容" v-show="form.online" prop="content"> <a-input v-model="form.content" type="textarea" placeholder="限10k字数" /> </a-form-model-item> - <a-form-model-item label="分类"> + <a-form-model-item label="分类" prop="class"> <a-select v-model="form.class" :allowClear="true" mode="multiple" placeholder="多选(至少一个)" :getPopupContainer="getCalendarContainer()"> <a-select-option value="shanghai"> @@ -41,25 +41,25 @@ </a-select> </a-form-model-item> - <a-form-model-item label="偏好"> + <a-form-model-item label="额外设置"> <a-switch v-model="form.preference" /> </a-form-model-item> <div v-show="form.preference" class="myBorder" style="padding:10px;"> - <a-form-model-item label="草稿模式"> + <a-form-model-item label="起个草稿"> <a-switch v-model="form.tempSave" /> <span v-show="form.tempSave" class="myTip"> - 临时存储,将不会发布该篇日志 + 临时存储,游客无法浏览 </span> </a-form-model-item> <a-form-model-item label=" 文件类型"> <a-radio-group v-model="form.blogType"> <a-radio value="Markdown"> - Markdown + markdown </a-radio> <a-radio value="Html"> - Html + html </a-radio> </a-radio-group> </a-form-model-item> @@ -72,16 +72,19 @@ {{ `${tag.slice(0, 20)}...` }} </a-tag> </a-tooltip> - <a-tag v-else :key="tag" :closable="index !== 0" @close="() => handleClose(tag)"> + <a-tag v-else :key="tag" :closable="index >= 0" @close="() => handleClose(tag)"> {{ tag }} </a-tag> </template> + <a-input v-if="inputVisible" ref="input" type="text" size="small" :style="{ width: '78px' }" :value="inputValue" @change="handleInputChange" @blur="handleInputConfirm" @keyup.enter="handleInputConfirm" /> + <a-tag v-else style="background: #fff; borderStyle: dashed;" @click="showInput"> <a-icon type="plus" /> New Tag </a-tag> + </a-form-model-item> @@ -95,14 +98,14 @@ </a-form-model-item> <a-form-model-item label="定时"> - <a-date-picker v-model="form.publishDate" show-time type="date" placeholder="发布时间" + <a-date-picker v-model="form.publishDate" show-time type="<datetime></datetime>" placeholder="发布时间" style="width: 100%;" :disabledDate="disabledDate" :getCalendarContainer="getCalendarContainer()" /> </a-form-model-item> - <div v-bind:class="{'myBorder':form.lock}"> + <div v-bind:class="{'myBorder':form.lock}" style="padding: 3px;"> <a-form-model-item label="加锁"> <a-switch v-model="form.lock" /> @@ -143,6 +146,7 @@ export default { data() { return { + blogFileList: [], coverFileList: [ // { @@ -157,13 +161,13 @@ inputVisible: false, inputValue: '', labelCol: { - span: 5 + span: 7 }, wrapperCol: { - span: 19 + span: 13 }, form: { - preference: true, + preference: false, title: '', content: '', class: [], @@ -174,16 +178,65 @@ auth: "private", password: "", blogFileList: [], - coverFileList: [ - // { - // uid: '-1', - // name: 'xxx.png', - // status: 'done', - // url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', - // thumbUrl: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', - // } - ], + coverFileList: [], }, + rules: { + title: [{ + required: true, + message: '标题不能为空', + trigger: 'blur' + }, + { + min: 5, + max: 50, + message: '字数限制1~50', + trigger: 'blur' + }, + ], + content: [{ + required: true, + message: '至少选一个上传内容', + trigger: 'blur' + }, ], + blogFileList: [{ + required: true, + message: '文件未上传', + }, { + min: 1, + message: '文件未上传', + }, ], + class: [{ + required: true, + message: '至少选一个分类', + trigger: 'blur' + }, ], + // region: [{ + // required: true, + // message: 'Please select Activity zone', + // trigger: 'change' + // }], + // date1: [{ + // required: true, + // message: 'Please pick a date', + // trigger: 'change' + // }], + // type: [{ + // type: 'array', + // required: true, + // message: 'Please select at least one activity type', + // trigger: 'change', + // }, ], + // resource: [{ + // required: true, + // message: 'Please select activity resource', + // trigger: 'change' + // }, ], + // desc: [{ + // required: true, + // message: 'Please input activity form', + // trigger: 'blur' + // }], + } }; }, methods: { @@ -195,7 +248,7 @@ }, handleClose(removedTag) { const tags = this.tags.filter(tag => tag !== removedTag); - console.log(tags); + //console.log(tags); this.tags = tags; }, @@ -216,21 +269,25 @@ if (inputValue && tags.indexOf(inputValue) === -1) { tags = [...tags, inputValue]; } - console.log(tags); + //console.log(tags); Object.assign(this, { tags, inputVisible: false, inputValue: '', }); }, - onSubmit() { - console.log('submit!', this.form); - }, + }, }; </script> <style lang="less"> + @media screen and(max-width: 575px) { + .ant-form-item-label { + padding: 8px !important; + } + } + .myTip { font-size: 10px; color: #999; @@ -238,6 +295,7 @@ .myBorder { border: 1px solid #999; + border-radius: 10px; } .ant-upload-list-item-info { -- Gitblit v1.9.1