学成在线--5.CMS页面管理开发(修改页面)

文章目录

    • 1.修改页面流程
      • 1)前端逻辑
      • 2)后端逻辑
    • 2.修改页面接口定义
    • 3.后端开发--Dao
    • 4.后端开发--Service
    • 5.后端开发--Controller
      • 1)根据id查询页面
      • 2)保存页面信息
    • 6.前端开发--页面处理流程
    • 7.前端开发--编写page_edit.vue
    • 8.前端开发--配置路由
    • 9.前端开发--在page_list.vue中添加“编辑”链接
    • 10.前端开发--进入修改页面立即显示要修改的页面信息
      • 1)定义api方法
      • 2)定义数据对象
      • 3)在created钩子方法中查询页面信息
    • 11.前端开发--Api调用
      • 1)定义api方法
      • 2)提交按钮方法
      • 3)提交按钮时间内容

1.修改页面流程

1)前端逻辑

(1)用户在页面列表中,点击“编辑”按钮;
(2)进入编辑页面,通过钩子方法请求服务端获取正在编辑的当前页面信息,并赋值给数据模型对象;
(3)页面信息通过数据绑定在表单显示;
(4)用户修改信息点击“提交”,请求服务端修改页面信息接口。

2)后端逻辑

(1)用户在前端点击“编辑”,跳转编辑页面后,需要显示页面信息,此时后端向服务器请求一次数据(使用 Spring Data提供的findById方法完成根据主键查询 );
(2)用户在编辑页面修改相应信息后,点击“提交“,此时第二次和数据库进行数据交互(使用 Spring Data提供的save方法完成数据保保存)。

2.修改页面接口定义

文件位置:Api项目下的com/ xuecheng/ api/ cms/ CmsPageControllerApi
修改页面需要定义两个API接口,一个用于根据指定id进行查询,一个用于对相应信息进行编辑,分别如下:

@ApiOperation("通过ID查询页面")
public CmsPage findById(String id);@ApiOperation("修改页面")
public CmsPageResult edit(String id,CmsPage cmsPage);

3.后端开发–Dao

文件位置:com/ xuecheng/ manage_cms/ dao/ CmsPageRepository

使用 Spring Data提供的findById方法完成根据主键查询 。

使用 Spring Data提供的save方法完成数据保存 。

4.后端开发–Service

文件位置:com/ xuecheng/ manage_cms/ service/ PageService

    //根据页面id查询页面public CmsPage getById(String id){Optional<CmsPage> optional = cmsPageRepository.findById(id);if(optional.isPresent()){CmsPage cmsPage = optional.get();return cmsPage;}return null;}//修改页面public CmsPageResult update(String id,CmsPage cmsPage){//根据id从数据库查询页面信息CmsPage one = this.getById(id);if(one!=null){//准备更新数据//设置要修改的数据//更新模板idone.setTemplateId(cmsPage.getTemplateId());//更新所属站点one.setSiteId(cmsPage.getSiteId());//更新页面别名one.setPageAliase(cmsPage.getPageAliase());//更新页面名称one.setPageName(cmsPage.getPageName());//更新访问路径one.setPageWebPath(cmsPage.getPageWebPath());//更新物理路径one.setPagePhysicalPath(cmsPage.getPagePhysicalPath());//提交修改cmsPageRepository.save(one);return new CmsPageResult(CommonCode.SUCCESS,one);}//修改失败return new CmsPageResult(CommonCode.FAIL,null);}

5.后端开发–Controller

文件位置:com/ xuecheng/ manage_cms/ controller/ CmsPageController

1)根据id查询页面

    @Override@GetMapping("/get/{id}")public CmsPage findById(@PathVariable("id") String id) {return pageService.getById(id);}

2)保存页面信息

    @Override@PutMapping("/edit/{id}")//这里使用put方法,http 方法中put表示更新public CmsPageResult edit(@PathVariable("id")String id, @RequestBody CmsPage cmsPage) {return pageService.update(id,cmsPage);}

6.前端开发–页面处理流程

(1)用户在页面列表中,点击“编辑”按钮;
(2)进入编辑页面,通过钩子方法请求服务端获取正在编辑的当前页面信息,并赋值给数据模型对象;
(3)页面信息通过数据绑定在表单显示;
(4)用户修改信息点击“提交”,请求服务端修改页面信息接口。

7.前端开发–编写page_edit.vue

修改页面的布局同添加页面,可以直接复制添加页面,在添加页面基础上修改。
文件位置:src/ module/ cms/ page/ page_edit.vue

<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="数据Url" prop="dataUrl"><el-input v-model="pageForm.dataUrl" 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 @click="go_back">返回</el-button><el-button type="primary" @click.native="editSubmit" :loading="addLoading">提交</el-button></div></div>
</template>
<script>import * as cmsApi from '../api/cms'export default{data(){return {//页面idpageId:'',//模版列表templateList:[],addLoading: false,//加载效果标记//新增界面数据pageForm: {siteId:'',templateId:'',pageName: '',pageAliase: '',pageWebPath: '',dataUrl:'',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'}]},siteList:[]}},methods:{go_back(){this.$router.push({path: '/cms/page/list', query: {page: this.$route.query.page,siteId:this.$route.query.siteId}})},editSubmit(){this.$refs.pageForm.validate((valid) => {//表单校验if (valid) {//表单校验通过this.$confirm('确认提交吗?', '提示', {}).then(() => {this.addLoading = true;//修改提交请求服务端的接口cmsApi.page_edit(this.pageId,this.pageForm).then((res) => {console.log(res);if(res.success){this.addLoading = false;this.$message({message: '提交成功',type: 'success'});//返回this.go_back();}else{this.addLoading = false;this.$message.error('提交失败');}});});}});}},created: function () {this.pageId=this.$route.params.pageId;//根据主键查询页面信息cmsApi.page_get(this.pageId).then((res) => {console.log(res);if(res){this.pageForm = res;}});},mounted:function(){//初始化站点列表this.siteList = [{siteId:'5a751fab6abb5044e0d19ea1',siteName:'门户主站'},{siteId:'102',siteName:'测试站'}]//模板列表this.templateList = [{templateId:'5a962b52b00ffc514038faf7',templateName:'首页'},{templateId:'5a962bf8b00ffc514038fafa',templateName:'轮播图'}]}}
</script>
<style></style>

预览:
在这里插入图片描述

8.前端开发–配置路由

文件位置:src/ module/ cms/ route/ index.js

import Home from '@/module/home/page/home.vue';
import page_list from '@/module/cms/page/page_list.vue';
import page_add from '@/module/cms/page/page_add.vue';
import page_edit from '@/module/cms/page/page_edit.vue';
export default [{path: '/',component: Home,name: 'CMS',//菜单名称hidden: false,children:[{path:'/cms/page/list',name:'页面列表',component: page_list,hidden:false},{path:'/cms/page/add',name:'新增页面',component: page_add,hidden:true},{path:'/cms/page/edit/:pageId',name:'修改页面',component: page_edit,hidden:true}]}
]

9.前端开发–在page_list.vue中添加“编辑”链接

文件位置:src/ module/ cms/ page/ page_list.vue

参考table组件的例子,在page_list.vue上添加“操作”列

<el‐table‐column label="操作" width="80">
<template slot‐scope="page">
<el‐button
size="small"type="text"
@click="edit(page.row.pageId)">编辑
</el‐button>
</template>
</el‐table‐column>

编写edit方法

//修改
edit:function (pageId) {
this.$router.push({ path: '/cms/page/edit/'+pageId,query:{
page: this.params.page,
siteId: this.params.siteId}})
}

预览:
在这里插入图片描述

10.前端开发–进入修改页面立即显示要修改的页面信息

1)定义api方法

文件位置:src/ module/ cms/ api/ cms.js

//根据id查询页面
export const page_get = id =>{return http.requestQuickGet(apiUrl+'/cms/page/get/'+id)
}

2)定义数据对象

文件位置:src/ module/ cms/ page/ page_edit.vue

进入修改页面传入pageId参数,在数据模型中添加pageId

data(){return {//页面idpageId:'',//模版列表templateList:[],addLoading: false,//加载效果标记//新增界面数据pageForm: {siteId:'',templateId:'',pageName: '',pageAliase: '',pageWebPath: '',dataUrl:'',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'}]},siteList:[]}},

3)在created钩子方法中查询页面信息

文件位置:src/ module/ cms/ page/ page_edit.vue

created: function () {this.pageId=this.$route.params.pageId;//根据主键查询页面信息cmsApi.page_get(this.pageId).then((res) => {console.log(res);if(res){this.pageForm = res;}});},

11.前端开发–Api调用

1)定义api方法

文件位置:src/ module/ cms/ api/ cms.js

//修改页面提交
export const page_edit = (id,params) =>{return http.requestPut(apiUrl+'/cms/page/edit/'+id,params)
}

2)提交按钮方法

文件位置:src/ module/ cms/ page/ page_edit.vue

<el‐button type="primary" @click="editSubmit" >提交</el‐button>

3)提交按钮时间内容

文件位置:src/ module/ cms/ page/ page_edit.vue

      editSubmit(){this.$refs.pageForm.validate((valid) => {//表单校验if (valid) {//表单校验通过this.$confirm('确认提交吗?', '提示', {}).then(() => {this.addLoading = true;//修改提交请求服务端的接口cmsApi.page_edit(this.pageId,this.pageForm).then((res) => {console.log(res);if(res.success){this.addLoading = false;this.$message({message: '提交成功',type: 'success'});//返回this.go_back();}else{this.addLoading = false;this.$message.error('提交失败');}});});}});}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Map四种获取key和value值的方法,以及对map中的元素排序

2019独角兽企业重金招聘Python工程师标准>>> 获取map的值主要有四种方法&#xff0c;这四种方法又分为两类: 一类是调用map.keySet()方法来获取key和value的值&#xff0c; 另一类则是通过map.entrySet()方法来取值&#xff0c; 两者的区别在于&#xff0c;前者主要…

HTTP 协议(详解)

HTTP协议简介&#xff1a;HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写&#xff0c;是用于万维网&#xff08;www.world wide web&#xff09;服务器与本地浏览器之间传输文本的传输协议。 http请求协议与相应协议HTTP协议包含浏览器发送数据到服务器需要遵循…

React Native集成Redux框架讲解与应用

学过React Native的都知道&#xff0c;RN的UI是根据相应组件的state进行render的&#xff0c;而页面又是由大大小小的组件构成&#xff0c;导致每个组件都必须维护自身的一套状态&#xff0c;因此当页面复杂化的时候&#xff0c;管理state会相当吃力的。而redux提供了一套机制来…

学成在线--7.CMS页面管理开发(异常处理)

文章目录1.异常处理的问题分析2.异常处理流程3.可预知异常处理1.自定义异常类2.异常抛出类3.异常捕获类4.异常处理测试1&#xff09;定义错误代码2&#xff09;异常处理测试4.不可预知异常处理1.定义异常捕获方法1&#xff09;异常抛出测试2&#xff09;异常捕获方法1.异常处理…

Django(6)

为什么不用_set related_name和related_query_name的区别related_name将成为相关对象的属性&#xff0c;允许您使用外键对模型进行“倒退”。例如&#xff0c;如果ModelA有像下面这样的字段&#xff0c;那么model_b ForeignKeyField(ModelB, related_namemodel_as)这将使您能够…

P5 RV1126编码测试Demo

目录 前言 01 测试Demo大致流程图 02 代码分析 2.1 VI设备初始化 2.2 使能通道 —— RK_MPI_VI_EnableChn 2.3 VI 和 VENC绑定 2.4 创建 编码线程 前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a…

MP算法和OMP算法及其思想

主要介绍MP(Matching Pursuits)算法和OMP(Orthogonal Matching Pursuit)算法[1]&#xff0c;这两个算法虽然在90年代初就提出来了&#xff0c;但作为经典的算法&#xff0c;国内文献(可能有我没有搜索到)都仅描述了算法步骤和简单的应用&#xff0c;并未对其进行详尽的分析&…

SpringMVC详细示例实战教程

一、SpringMVC基础入门&#xff0c;创建一个HelloWorld程序 1.首先&#xff0c;导入SpringMVC需要的jar包。 2.添加Web.xml配置文件中关于SpringMVC的配置 123456789101112131415<!--configure the setting of springmvcDispatcherServlet and configure the mapping-->&…

学成在线--8.Freemarker入门教程

文章目录1.FreeMarker介绍1&#xff09;常用的java模板引擎还有哪些&#xff1f;2&#xff09;freemarker是一个用Java开发的模板引擎3&#xff09;模板数据模型输出2.FreeMarker快速入门1&#xff09;创建测试工程2&#xff09;配置文件3&#xff09;创建模型类4&#xff09;创…

if...elif...else...fi和case...esac的脚本条件判断式

注意1&#xff1a; if 表达式和case 表达式的区别及什么时候使用哪个要有明确的区分&#xff1f; 『 if .... then .... fi 』对于变量的判断是以『比对』的方式来分辨的&#xff0c; 如果符合状态就进行某些行为&#xff0c;并且透过较多层次 (就是elif ) 的方式来进行多个变量…

安卓自定义View进阶-分类与流程

自定义View绘制流程函数调用链(简化版) 一.自定义View分类 我将自定义View分为了两类(sloop个人分类法&#xff0c;非官方)&#xff1a; 1.自定义ViewGroup 自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件&#xff0c;大多继承自ViewGroup或各种Layout&…

【笔试记录】2021/3/13美团

2021/3/13美团笔试 1.旋转二维数组 m, n map(int, input().split()) a [] for _ in range(m):a.append(list(map(int, input().split()))) for j in range(n):for k in range(m):print(a[k][j], end )print(end\n)输入输出 2.找出输入字符串中的所有数字 s input() n …

学成在线--9.页面静态化

文章目录一.页面静态化流程二.数据模型1.轮播图DataUrl接口1&#xff09;需求分析2&#xff09;接口定义3&#xff09;Dao4&#xff09;Service5&#xff09;Controller6&#xff09;测试2.远程请求接口1&#xff09;添加依赖2&#xff09;配置RestTemplate3&#xff09;测试Re…

数据库MySQL/mariadb知识点——日志记录(2)二进制日志

二进制日志 记录已提交事务导致数据改变或潜在导致数据改变的SQL语句&#xff0c;通过“重放”日志文件中的事件来生成数据副本&#xff0c;不依赖存储引擎类型。 开启二进制日志&#xff0c;默认是关闭的&#xff0c;二进制日志和数据分开存放 开启记录二进制文件的功能&#…

【面试记录】Python常见面试200题及答案总结

Python常见面试200题及答案总结 /待完善/ 1. 列出5个常用python标准库&#xff1f; os&#xff1a;提供了不少与操作系统相关联的函数&#xff0c;提供了一种可移植的使用操作系统功能的方法。使用os模块中提供的接口&#xff0c;可实现跨平台访问。但是&#xff0c;并不是所…

Linux负载均衡软件LVS之一(概念篇)

2019独角兽企业重金招聘Python工程师标准>>> 一、 LVS简介 LVS是Linux Virtual Server的简称&#xff0c;也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分…

学成在线--10.页面预览

文章目录一.需求分析二. 搭建环境1.在cms服务中集成freemarker&#xff1a;2.在application.yml配置freemarker三.Service四.Controller五.页面预览测试-- 配置Nginx代理六.页面预览测试-- 添加“页面预览”链接一.需求分析 页面在发布前增加页面预览的步骤&#xff0c;方便用…

【代码刷题】排序算法总结(python实现)

排序算法总结&#xff08;Python实现&#xff09;算法介绍算法分类相关概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;1.1 思想1.2 python实现1.3 复杂度1.4 稳定性2. 快速排序&#xff08;Quick Sort&#xff09;2.1 思想&#xff08;伪代码&#xff09;2.2 python实现2…

学成在线--11.RabbitMQ快速入门

文章目录一.RabbitMQ简介二.相关知识1.AMQP2.JMS是什么 &#xff1f;三.RabbitMQ的工作原理四.Hello World1.创建Maven工程2.生产者3.消费者五.总结一.RabbitMQ简介 MQ全称为Message Queue&#xff0c;即消息队列&#xff0c; RabbitMQ是由erlang语言开发&#xff0c;基于AMQP…

maven工程建立和SSM(springMVC+spring+mybatis)整合

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.环境&#xff1a; maven 版本&#xff1a;3.5.1 ecelipse mars.2 JDK : jdk1.8.0_45 tomcat : apache-tomcat-8.0.0-RC1 2. 建…