Skip to content

Commit c2c9923

Browse files
committed
feat(book): validate
1 parent e006429 commit c2c9923

2 files changed

Lines changed: 58 additions & 24 deletions

File tree

src/view/book/book-create.vue

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<div class="wrap">
88
<el-row>
99
<el-col :lg="16" :md="20" :sm="24" :xs="24">
10-
<el-form :model="book" status-icon ref="form" label-width="100px" @submit.native.prevent>
10+
<el-form :model="book" status-icon ref="form" label-width="100px" @submit.native.prevent :rules="rules">
1111
<el-form-item label="书名" prop="title">
1212
<el-input size="medium" v-model="book.title" placeholder="请填写书名"></el-input>
1313
</el-form-item>
@@ -45,7 +45,7 @@ import { Message } from 'element-ui'
4545
import bookModel from '@/model/book'
4646
4747
export default {
48-
setup(props, context) {
48+
setup(props, ctx) {
4949
const data = reactive({
5050
book: {
5151
title: '',
@@ -55,31 +55,66 @@ export default {
5555
},
5656
})
5757
58+
/**
59+
* 表单规则验证
60+
*/
61+
const { rules } = getRules()
62+
5863
// 重置表单
5964
const resetForm = formName => {
60-
context.refs[formName].resetFields()
65+
ctx.refs[formName].resetFields()
6166
}
6267
6368
const submitForm = async formName => {
64-
try {
65-
const res = await bookModel.createBook(data.book)
66-
if (res.code < window.MAX_SUCCESS_CODE) {
67-
Message.success(`${res.message}`)
68-
resetForm(formName)
69+
ctx.refs[formName].validate(async valid => {
70+
if (valid) {
71+
try {
72+
const res = await bookModel.createBook(data.book)
73+
if (res.code < window.MAX_SUCCESS_CODE) {
74+
Message.success(`${res.message}`)
75+
resetForm(formName)
76+
}
77+
} catch (error) {
78+
Message.error('图书添加失败,请检测填写信息')
79+
console.error(error)
80+
}
81+
} else {
82+
console.error('error submit!!')
83+
Message.error('请将信息填写完整')
6984
}
70-
} catch (error) {
71-
Message.error('图书添加失败,请检测填写信息')
72-
console.log(error)
73-
}
85+
})
7486
}
7587
7688
return {
77-
...toRefs(data),
78-
submitForm,
89+
rules,
7990
resetForm,
91+
submitForm,
92+
...toRefs(data),
8093
}
8194
},
8295
}
96+
97+
/**
98+
* 表单验证规则
99+
*/
100+
function getRules() {
101+
/**
102+
* 验证回调函数
103+
*/
104+
const checkInfo = (rule, value, callback) => {
105+
if (!value) {
106+
callback(new Error('信息不能为空'))
107+
}
108+
callback()
109+
}
110+
const rules = {
111+
title: [{ validator: checkInfo, trigger: 'blur', required: true }],
112+
author: [{ validator: checkInfo, trigger: 'blur', required: true }],
113+
summary: [{ validator: checkInfo, trigger: 'blur', required: true }],
114+
image: [{ validator: checkInfo, trigger: 'blur', required: true }],
115+
}
116+
return { rules }
117+
}
83118
</script>
84119

85120
<style lang="scss" scoped>

src/view/home/home.vue

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,14 @@ const sideBarWidth = '210px'
3535
const totalHeight = navBarHeight + reuseTabHeight + marginHeight
3636
3737
export default {
38-
name: 'layout',
38+
components: {
39+
NavBar,
40+
SideBar,
41+
AppMain,
42+
ReuseTab,
43+
MenuTab,
44+
BackTop,
45+
},
3946
data() {
4047
return {
4148
isCollapse: false, // 左侧菜单栏是否折叠
@@ -46,7 +53,6 @@ export default {
4653
isPhone: false,
4754
}
4855
},
49-
created() {},
5056
mounted() {
5157
this.setResize()
5258
// console.log(this.clientWidth)
@@ -159,14 +165,7 @@ export default {
159165
}
160166
},
161167
},
162-
components: {
163-
NavBar,
164-
SideBar,
165-
AppMain,
166-
ReuseTab,
167-
MenuTab,
168-
BackTop,
169-
},
168+
170169
beforeDestroy() {
171170
this.eventBus.$off('noReuse')
172171
this.eventBus.$off('hasReuse')

0 commit comments

Comments
 (0)