SPA项目开发之CRUD+表单验证

本文详细介绍了在SPA项目中实现CRUD操作和表单验证的具体方法,包括使用Element UI的Form组件进行表单验证,以及通过前后端交互完成文章的增删改查功能。

SPA项目开发之CRUD+表单验证

前言

表单验证和CRUD 两个都是我们SPA开发的核心功能 这个点我们需要牢记

结果图:
在这里插入图片描述

表单验证

Form组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,
并将Form-Item的prop属性设置为需校验的字段名即可

注1:有多个表单,怎么在提交进行区分?
我们在rules这里写了对表单的验证规则,但是我们如何在methods里进行指定的表单进行认证,
所以我们一开始就在el-form里写了 ref=“ruleForm”,我们在methods里就可以用

1.我们现在Element里面拿到我们需要的组件 From表单
我们只要验证这一块 C下来

在这里插入图片描述

<template>
	<div>
		<el-form :inline="true" :model="formInline" class="user-search">
			<el-form-item label="搜索:">
				<el-input size="small" v-model="formInline.title" placeholder="输入文章标题"></el-input>
			</el-form-item>
			<el-form-item>
				<el-button size="small" type="primary" icon="el-icon-search" @click="search">搜索</el-button>
				<el-button size="small" type="primary" icon="el-icon-plus" @click="handleAdd()">添加</el-button>
			</el-form-item>
		</el-form>
		<!--列表-->
		<el-table size="small" :data="listData" element-loading-text="拼命加载中" style="width: 100%;">
			<el-table-column align="center" type="selection" min-width="1">
			</el-table-column>
			<el-table-column sortable prop="id" label="文章ID" min-width="1">
			</el-table-column>
			<el-table-column sortable prop="title" label="文章标题" min-width="2">
			</el-table-column>
			<el-table-column sortable prop="body" label="文章内容" min-width="4">
			</el-table-column>
			<el-table-column align="center" label="操作" min-width="2">
				<template slot-scope="scope">
					<el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
					<el-button size="mini" type="danger" @click="deleteUser(scope.$index, scope.row)">删除</el-button>
				</template>
			</el-table-column>
		</el-table>
		<el-pagination style="margin-top: 20px;" @size-change="handleSizeChange" @current-change="handleCurrentChange"
		 :current-page="formInline.page" :page-sizes="[10, 20, 30, 50]" :page-size="100" layout="total, sizes, prev, pager, next, jumper"
		 :total="total">
		</el-pagination>

		<!-- 编辑界面 -->
		<el-dialog :title="title" :visible.sync="editFormVisible" width="30%" @before-close="closeDialog">
			<el-form label-width="120px" :model="editForm" :rules="rules" ref="editForm">
				<el-form-item label="文章标题" prop="title">
					<el-input size="small" v-model="editForm.title" auto-complete="off" placeholder="请输入文章标题"></el-input>
				</el-form-item>
				<el-form-item label="文章内容" prop="body">
					<el-input size="small" v-model="editForm.body" auto-complete="off" placeholder="请输入文章内容"></el-input>
				</el-form-item>
			</el-form>
			<div slot="footer" class="dialog-footer">
				<el-button size="small" @click="closeDialog">取消</el-button>
				<el-button size="small" type="primary" class="title" @click="submitForm('editForm')">保存</el-button>
			</div>
		</el-dialog>


	</div>
</template>

<script>
	export default {
		data() {
			return {
				listData: [],
				formInline: {
					page: 1,
					rows: 10,
					title: ''
				},
				total: 0,
				editForm: {
					id: 0,
					title: '',
					body: ''
				},
				editFormVisible: false,
				title: '',
				//表单效验rules 第一个知识点
				rules: {
					title: [{
							required: true,
							message: '请输入文章标题',
							trigger: 'blur' //校验
						},
						{
							min: 3,
							max: 5,
							message: '文章标题长度在 3 到 5 个字符',
							trigger: 'blur'
						}
					],
					body: [{
						required: true,
						message: '请输入文章',
						trigger: 'change'
					}]

				}
			};
		},
		methods: {

			handleSizeChange(rows) {
				this.formInline.page = 1;
				this.formInline.rows = rows;
				this.search();
			},
			handleCurrentChange(page) {
				this.formInline.page = page;
				this.search();
			},
			doSearch(params) {
				let url = this.axios.urls.SYSTEM_ARTICLE_LIST;

				this.axios.post(url, params).then((response) => {
					console.log(response);
					this.listData = response.data.result;
					this.total = response.data.pageBean.total;
				}).catch(function(error) {
					console.log(error);
				});
			},
			search() {
				this.doSearch(this.formInline);
			},
			closeDialog() {

			},
			/* submitForm(forName) {   //提交的方法触发验证
				this.$refs[formName].validate((valid) => {
					if (valid) {
					  alert('submit!');
					} else {
						console.log('error submit!!');
					  return false;
					}
				});
			}, */
			submitForm(formName) { //提交的方法触发验证
				this.$refs[formName].validate((valid) => {
					if (valid) {
						let url; //拿到提交地址
						if (this.editForm.id == 0) { //如果id等于0  在数据库id是自增长 判断为新增
							url = this.axios.urls.SYSTEM_ARTICLE_ADD;
						} else {
							url = this.axios.urls.SYSTEM_ARTICLE_EDIT; //反之修改  修改要把id修改了
						}
						this.axios.post(url, this.editForm).then((response) => {
							console.log(response);
							this.clearData(); //修改或者 增加 清空内容
							this.search();
						}).catch(function(error) {
							console.log(error);
						});
					} else {
						console.log('error submit!!');
						return false;
					}
				});

			},
			handleAdd() {
				this.clearData(); // 增加时候调用方法
				this.editFormVisible = true; //弹出窗口
				this.title = '新增文章';
			},
			handleEdit(index, row) { //修改
				this.editFormVisible = true; //弹出窗口
				this.title = '编辑文章';
				this.editForm.id = row.id; //获取id
				this.editForm.title = row.title; //获取id
				this.editForm.body = row.body; //获取id
			},
			deleteUser(index, row) {
				let url = this.axios.urls.SYSTEM_ARTICLE_DEL; //反之修改  修改要把id修改了



				this.$confirm('是否确认删除?', '确认信息', {
						distinguishCancelAndClose: true,
						confirmButtonText: '确认',
						cancelButtonText: '返回'
					})
					.then(() => {
						this.axios.post(url, {
							id: row.id
						}).then((response) => {
							console.log(response);
							this.clearData(); //修改或者 增加 清空内容
							this.search(); //刷新
						}).catch(function(error) {
							console.log(error);
						});
					})
					.catch(action => {
            this.$message({
              type: 'info',
              message: action === 'cancel'
                ? '放弃删除'
                : '停留在当前页面'
            })
          });


			},
			clearData() { //清空方法
				this.editFormVisible = false;
				this.title = '';
				this.editForm.id = 0;
				this.editForm.title = '';
				this.editForm.body = '';
			}
		},
		created() {
			this.doSearch({});
		}
	}
</script>

<style>

</style>

rules就使我们今天第一个知识点啦 效验 我们在网站上C过来的模板改成数据库对应的值就行

在这里插入图片描述
在这里插入图片描述
两个都为空 点击保存 会触发效验 长度不够也不行
在这里插入图片描述

CRUD

新增

添加修改/删除按钮

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

删除我弄了个提示框

在组件的在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当我点击返回 会提示返回成功 值也还在
在这里插入图片描述
再次点击删除删除成功
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值