文章目录
- 1.定义新增页面接口
- 1)在model工程中定义响应模型
- 2)在api工程中添加接口
- 2.新增页面服务端开发
- 1)Dao
- 2)Service
- 3)Controller
- 3.新增页面前端开发
- 1)创建page_add.vue
- 2)配置路由
- 3)在page_list.vue中添加“添加页面”的按钮
- 4)page_add.vue中添加数据对象
- 5)站点及模板数据(先使用静态数据)
- 6)page_add.vue中添加“返回”按钮
- 7)校验表单数据
- 8)测试
- 4.Api调用
- 1)在cms.js中定义page_add方法
- 2)添加“确认提交”事件
- 3)测试
1.定义新增页面接口
1)在model工程中定义响应模型
@Data
public class CmsPageResult extends ResponseResult {
CmsPage cmsPage;
public CmsPageResult(ResultCode resultCode,CmsPage cmsPage) {
super(resultCode);
this.cmsPage = cmsPage;}
}
2)在api工程中添加接口
@ApiOperation("添加页面")
public CmsPageResult add(CmsPage cmsPage);
2.新增页面服务端开发
在cms_page集合上创建页面名称、站点Id、页面webpath为唯一索引
1)Dao
添加新页面之前,需要查询一下页面是否在数据库中已经存在。
添加根据页面名称、站点Id、页面webpath查询页面方法,此方法用于校验页面是否存在
public interface CmsPageRepository extends MongoRepository<CmsPage,String> {
//根据页面名称、站点id、页面访问路径查询
CmsPage findByPageNameAndSiteIdAndPageWebPath(String pageName,String siteId,String
pageWebPath);
若页面在数据库中不存在,使用 CmsPageRepository父类MongoRepository提供的save方法进行保存。
2)Service
//添加页面
public CmsPageResult add(CmsPage cmsPage){
//校验页面是否存在,根据页面名称、站点Id、页面webpath查询
CmsPage cmsPage1 = cmsPageRepository.findByPageNameAndSiteIdAndPageWebPath(cmsPage.getPageName(),
cmsPage.getSiteId(), cmsPage.getPageWebPath());
if(cmsPage1==null){
cmsPage.setPageId(null);//添加页面主键由spring data 自动生成
cmsPageRepository.save(cmsPage);
//返回结果
CmsPageResult cmsPageResult = new CmsPageResult(CommonCode.SUCCESS,cmsPage);
return cmsPageResult;
} r
eturn new CmsPageResult(CommonCode.FAIL,null);
}
3)Controller
//添加页面
@Override
@PostMapping("/add")
public CmsPageResult add(@RequestBody CmsPage cmsPage) {
return pageService.add(cmsPage);
}
3.新增页面前端开发
1)创建page_add.vue
使用Element-UI的form组件编写添加表单内容,页面效果如下:
代码如下:
<template>
<div><el-form :model="pageForm" label-width="80px" :rules="pageFormRules" ref="pageForm"><el-form-item label="所属站点" prop="siteId"><el-select v-model="pageForm.siteId" placeholder="请选择站点"><el-optionv-for="item in siteList":key="item.siteId":label="item.siteName":value="item.siteId"></el-option></el-select></el-form-item><el-form-item label="选择模版" prop="templateId"><el-select v-model="pageForm.templateId" placeholder="请选择"><el-optionv-for="item in templateList":key="item.templateId":label="item.templateName":value="item.templateId"></el-option></el-select></el-form-item><el-form-item label="页面名称" prop="pageName"><el-input v-model="pageForm.pageName" auto-complete="off" ></el-input></el-form-item><el-form-item label="别名" prop="pageAliase"><el-input v-model="pageForm.pageAliase" auto-complete="off" ></el-input></el-form-item><el-form-item label="访问路径" prop="pageWebPath"><el-input v-model="pageForm.pageWebPath" auto-complete="off" ></el-input></el-form-item><el-form-item label="物理路径" prop="pagePhysicalPath"><el-input v-model="pageForm.pagePhysicalPath" auto-complete="off" ></el-input></el-form-item><el-form-item label="类型"><el-radio-group v-model="pageForm.pageType"><el-radio class="radio" label="0">静态</el-radio><el-radio class="radio" label="1">动态</el-radio></el-radio-group></el-form-item><el-form-item label="创建时间"><el-date-picker type="datetime" placeholder="创建时间" v-model="pageForm.pageCreateTime"></el-date-picker></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="addSubmit" >提交</el-button><el-button type="primary" @click="go_back" >返回</el-button></div>
</div>
</template>
<script>/*编写页面静态部分,即model及vm部分。*/import * as cmsApi from '../api/cms'export default {data() {return {siteList:[],templateList:[],pageForm:{siteId:'',templateId:'',pageName: '',pageAliase: '',pageWebPath: '',pageParameter:'',pagePhysicalPath:'',pageType:'',pageCreateTime: new Date()},pageFormRules: {siteId:[{required: true, message: '请选择站点', trigger: 'blur'}],templateId:[{required: true, message: '请选择模版', trigger: 'blur'}],pageName: [{required: true, message: '请输入页面名称', trigger: 'blur'}],pageWebPath: [{required: true, message: '请输入访问路径', trigger: 'blur'}],pagePhysicalPath: [{required: true, message: '请输入物理路径', trigger: 'blur'}]}}},methods:{addSubmit:function(){this.$refs['pageForm'].validate((valid) => {if (valid) {//表单校验成功//确认提示this.$confirm('您确认提交吗?', '提示', { }).then(() => {//调用page_add方法请求服务端的新增页面接口cmsApi.page_add(this.pageForm).then(res=>{//解析服务端响应内容if(res.success){/*this.$message({message: '提交成功',type: 'success'})*/this.$message.success("提交成功")//将表单清空this.$refs['pageForm'].resetFields();}else if(res.message){this.$message.error(res.message)}else{this.$message.error("提交失败")}});})}});},//返回go_back:function () {this.$router.push({path:'/cms/page/list',query:{page:this.$route.query.page,//取出路由中的参数siteId:this.$route.query.siteId}})}},created(){//初始化站点列表this.siteList = [{siteId:'5a751fab6abb5044e0d19ea1',siteName:'门户主站'},{siteId:'102',siteName:'测试站'}]//模板列表this.templateList = [{templateId:'5a962b52b00ffc514038faf7',templateName:'首页'},{templateId:'5a962bf8b00ffc514038fafa',templateName:'轮播图'}]}}
</script>
<style>/*编写页面样式,不是必须*/
</style>
2)配置路由
在cms模块的路由文件中配置“添加页面”的路由,由于“添加页面”不需要显示为一个菜单,这里hidden设置为true隐藏菜单
3)在page_list.vue中添加“添加页面”的按钮
实际情况是用户进入页面查询列表,点击“新增页面”按钮进入新增页面窗口,在查询按钮的旁边添加:
<router‐link class="mui‐tab‐item" :to="{path:'/cms/page/add/'}">
<el‐button type="primary" size="small">新增页面</el‐button>
</router‐link>
说明:
router-link是vue提供的路由功能,用于在页面生成路由链接,最终在html渲染后就是标签
to:目标路由地址
4)page_add.vue中添加数据对象
data(){
return {
//站点列表
siteList:[],
//模版列表
templateList:[],
//新增界面数据
pageForm: {
siteId:'',
templateId:'',
pageName: '',
pageAliase: '',
pageWebPath: '',
pageParameter:'',
pagePhysicalPath:'',
pageType:'',
pageCreateTime: new Date()
}
}
},
methods:{
addSubmit(){
alert("提交")
}
}
5)站点及模板数据(先使用静态数据)
在created钩子方法中定义,created是在html渲染之前执行,这里推荐使用created。
created:function(){
//初始化站点列表
this.siteList = [
{
siteId:'5a751fab6abb5044e0d19ea1',
siteName:'门户主站'
},
{
siteId:'102',
siteName:'测试站'
}
] /
/模板列表
this.templateList = [
{
templateId:'5a962b52b00ffc514038faf7',
templateName:'首页'
},
{
templateId:'5a962bf8b00ffc514038fafa',
templateName:'轮播图'
}
]
}
6)page_add.vue中添加“返回”按钮
进入新增页面后只能通过菜单再次进入页面列表,可以在新增页面添加“返回”按钮,点击返回按钮返回到页面列表。
page_list.vue 页面“新增页面”按钮带上参数,query表示在路由url上带上参数(下边需要使用)
<router‐link class="mui‐tab‐item" :to="{path:'/cms/page/add/',query:{
page: this.params.page,
siteId: this.params.siteId}}">
<el‐button type="primary" size="small">新增页面</el‐button>
</router‐link>
在page_add.vue上定义返回按钮
<el‐button type="primary" @click="go_back" >返回</el‐button>
在page_add.vue上定义返回方法
go_back(){
this.$router.push({
path: '/cms/page/list', query: {
page: this.$route.query.page,
siteId:this.$route.query.siteId
}
})
}
说明:this. $route.query 表示取出路由上的参数列表,有两个取路由参数的方法:
a、通过在路由上添加key/value串使用this.$route.query来取参数,例如:/router1?id=123 ,/router1?id=456
可以通过this. $ route.query.id获取参数id的值。
b、通过将参数作为路由一部分进行传参数使用this.$route.params来获取,例如:定义的路由为/router1/:id ,请
求/router1/123时可以通过this. $ route.params.id来获取,此种情况用this.$route.query.id是拿不到的。
进入查询列表,从url中获取页码和站点id并赋值给数据模型对象,从而实现页面回显
created() {
//从路由上获取参数
this.params.page = Number.parseInt(this.$route.query.page||1);
this.params.siteId = this.$route.query.siteId||'';
小技巧:使用 ||返回第一个有效值
7)校验表单数据
Element-UI的Form组件提供表单校验的方法:
a) 在form属性上配置rules(表单验证规则)
<el‐form :model="pageForm" :rules="pageFormRules" label‐width="80px" >
b) 在数据模型中配置校验规则:
pageFormRules: {
siteId:[
{required: true, message: '请选择站点', trigger: 'blur'}
],
templateId:[
{required: true, message: '请选择模版', trigger: 'blur'}
],
pageName: [
{required: true, message: '请输入页面名称', trigger: 'blur'}
],
pageWebPath: [
{required: true, message: '请输入访问路径', trigger: 'blur'}
],
pagePhysicalPath: [
{required: true, message: '请输入物理路径', trigger: 'blur'}
]
}
c ) 点击提交按钮触发校验,在form表单上添加 ref属性(ref=“pageForm”)在校验时引用此表单对象
<
el‐form :model="pageForm" :rules="pageFormRules" label‐width="80px" ref="pageForm">
d ) 执行校验
this.$refs.pageForm.validate((valid) => {
if (valid) {
alert('提交');
} else {
alert('校验失败');
return false;
}
})
8)测试
4.Api调用
1)在cms.js中定义page_add方法
/*页面添加*/
export const page_add = params => {
return http.requestPost(apiUrl+'/cms/page/add',params)
}
2)添加“确认提交”事件
本功能使用到两个UI组件:
1、使用element-ui的message-box组件弹出确认提交窗口
this.$confirm('确认提交吗?', '提示', {}).then(() => {})
2、使用 message组件提示操作结果
this.$message({
message: '提交成功',
type: 'success'
})
完整的代码如下:
addSubmit(){
this.$refs.pageForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
cmsApi.page_add(this.pageForm).then((res) => {
console.log(res);
if(res.success){
this.$message({
message: '提交成功',
type: 'success'
});
this.$refs['pageForm'].resetFields();
}else{
this.$message.error('提交失败');
}
});
});
}
});
}
3)测试
1、进入页面列表页面
2、点击“增加页面”按钮
3、输入页面信息点击“提交”