diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/AdvisoryRepositoryImpl.java b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/AdvisoryRepositoryImpl.java
index c16ab64..7574e6f 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/AdvisoryRepositoryImpl.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/AdvisoryRepositoryImpl.java
@@ -5,8 +5,10 @@
 import com.supwisdom.dlpay.framework.jpa.page.Pagination;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.portal.bean.AdvisorySearchBean;
+import com.supwisdom.dlpay.portal.bean.PageSearchBean;
 import com.supwisdom.dlpay.portal.dao.AdvisoryRepository;
 import com.supwisdom.dlpay.portal.domain.TBAdvisory;
+import com.supwisdom.dlpay.portal.domain.TBPrompt;
 import org.hibernate.transform.Transformers;
 import org.jetbrains.annotations.NotNull;
 
@@ -43,4 +45,13 @@
     Finder f = Finder.create(sql);
     return findNative(f, Transformers.aliasToBean(TBAdvisory.class), pageno, pagesize);
   }
+
+  @NotNull
+  @Override
+  public Pagination getPromptList(@NotNull PageSearchBean bean) {
+    int pageno = bean.getPageno();
+    int pagesize = bean.getPagesize();
+    Finder f = Finder.create("select * from tb_prompt order by updatetime desc");
+    return findNative(f, Transformers.aliasToBean(TBPrompt.class), pageno, pagesize);
+  }
 }
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/ColumnRepositoryImpl.java b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/ColumnRepositoryImpl.java
index 9ead66d..c8ad430 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/ColumnRepositoryImpl.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/ColumnRepositoryImpl.java
@@ -4,7 +4,7 @@
 import com.supwisdom.dlpay.framework.jpa.Finder;
 import com.supwisdom.dlpay.framework.jpa.page.Pagination;
 import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.dlpay.portal.bean.BannerSearchBean;
+import com.supwisdom.dlpay.portal.bean.PageSearchBean;
 import com.supwisdom.dlpay.portal.bean.ColumnSearchBean;
 import com.supwisdom.dlpay.portal.dao.ColumnRepository;
 import com.supwisdom.dlpay.portal.domain.TBBanner;
@@ -42,7 +42,7 @@
 
   @NotNull
   @Override
-  public Pagination getBannerList(@NotNull BannerSearchBean bean) {
+  public Pagination getBannerList(@NotNull PageSearchBean bean) {
     int pageno = bean.getPageno();
     int pagesize = bean.getPagesize();
     Finder f = Finder.create("select * from tb_banner order by ordernum ");
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBPrompt.java b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBPrompt.java
new file mode 100644
index 0000000..c3790c0
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBPrompt.java
@@ -0,0 +1,68 @@
+package com.supwisdom.dlpay.portal.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "tb_prompt")
+public class TBPrompt {
+  @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "id", nullable = false, length = 32)
+  private String id;
+
+  @Column(name = "title", length = 50)
+  private String title;
+
+  @Column(name = "content", length = 1000)
+  private String content;
+
+  @Column(name = "code", length = 20)
+  private String code;
+
+  @Column(name = "updatetime", length = 14)
+  private String updatetime;
+
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getTitle() {
+    return title;
+  }
+
+  public void setTitle(String title) {
+    this.title = title;
+  }
+
+  public String getContent() {
+    return content;
+  }
+
+  public void setContent(String content) {
+    this.content = content;
+  }
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getUpdatetime() {
+    return updatetime;
+  }
+
+  public void setUpdatetime(String updatetime) {
+    this.updatetime = updatetime;
+  }
+}
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index 401b4a0..0e59219 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -332,7 +332,7 @@
      */
     @RequestMapping("/advisory/list")
     fun getActivity(@RequestHeader("Authorization") auth: String?,
-                   pageno:Int,pagesize:Int): JsonResult? {
+                    pageno: Int, pagesize: Int): JsonResult? {
         try {
             val page = advisoryService.getMobileAdvisoryList(pageno, pagesize)
             return JsonResult.ok().put("data", page)
@@ -350,7 +350,7 @@
      */
     @RequestMapping("/outlets/nearby")
     fun getNearbyOutlets(@RequestHeader("Authorization") auth: String?,
-                    location:String,distance:Double): JsonResult? {
+                         location: String, distance: Double): JsonResult? {
         try {
             val data = outletsService.getNearbyOutlets(location, distance)
             return JsonResult.ok().put("data", data)
@@ -370,7 +370,7 @@
     fun getNearbyOutlets(@RequestHeader("Authorization") auth: String?): JsonResult? {
         try {
             val list = columnService.getAllBanner()
-            return JsonResult.ok().put("data",list)
+            return JsonResult.ok().put("data", list)
         } catch (e: Exception) {
             logger.error { e.message }
             if (e is PortalBusinessException) {
@@ -412,7 +412,7 @@
             }
             val refundMedicalDtl = medicalService.refundMedicalDtlInit(bean)
             val medicalDtl = medicalService.refundMedicalDtlConfirm(bean.outOrderNumber, refundMedicalDtl)
-            val map = HashMap<String,String>()
+            val map = HashMap<String, String>()
             val jsonResult = JsonResult.ok()
             if (medicalDtl.paystatus == MedicalConstant.DTL_STATUS_SUCCESS) {
                 map["refundNumber"] = medicalDtl.hisrefundno
@@ -422,7 +422,7 @@
             map["status"] = medicalDtl.paystatus
             map["transdate"] = medicalDtl.transdate
             map["transtime"] = medicalDtl.transtime
-            return jsonResult.put("data",map)
+            return jsonResult.put("data", map)
         } catch (e: Exception) {
             logger.error("系统异常", e)
             if (e is MedicineException) {
@@ -450,7 +450,7 @@
             }
             val refundMedicalDtl = medicalService.refundMedicalDtlInit(bean)
             val medicalDtl = medicalService.refundQuickPayConfirm(bean.outOrderNumber, refundMedicalDtl)
-            val map = HashMap<String,String>()
+            val map = HashMap<String, String>()
             val jsonResult = JsonResult.ok()
             if (medicalDtl.paystatus == MedicalConstant.DTL_STATUS_SUCCESS) {
                 map["refundNumber"] = medicalDtl.hisrefundno
@@ -460,7 +460,7 @@
             map["status"] = medicalDtl.paystatus
             map["transdate"] = medicalDtl.transdate
             map["transtime"] = medicalDtl.transtime
-            return jsonResult.put("data",map)
+            return jsonResult.put("data", map)
         } catch (e: Exception) {
             logger.error("系统异常", e)
             if (e is MedicineException) {
@@ -484,7 +484,7 @@
                 return JsonResult.error("token检验失败，请检查是否正确")
             }
             val medicalDtl = medicalService.queryRefundResult(bean)
-            val map = HashMap<String,String>()
+            val map = HashMap<String, String>()
             val jsonResult = JsonResult.ok()
             if (medicalDtl.paystatus == MedicalConstant.DTL_STATUS_SUCCESS) {
                 map["refundNumber"] = medicalDtl.hisrefundno
@@ -510,7 +510,7 @@
     @RequestMapping(value = ["/security/list"], method = [RequestMethod.GET])
     fun getSecretSecurityList(phone: String?): JsonResult? {
         return try {
-            val user:TBMobileUser
+            val user: TBMobileUser
             user = if (phone.isNullOrEmpty()) {
                 val p = SecurityContextHolder.getContext().authentication
                 mobileApiService.findUserById(p.name)
@@ -540,7 +540,7 @@
                     ?: return JsonResult.error("用户不存在，请注册")
             bean.uid = user.uid
             val error = secretSecurityService.checkUserSecurity(bean)
-            return JsonResult.ok().put("error",error)
+            return JsonResult.ok().put("error", error)
         } catch (e: Exception) {
             if (e is PortalBusinessException) {
                 return JsonResult.error(e.message)
@@ -597,7 +597,8 @@
                 if (!version.isNullOrEmpty()) {
                     val split = version.split("##")
                     if (split[1].toInt() > verno.toInt()) {
-                        return JsonResult.ok().put("prompt", "您当前使用的应用不是最新版本，如要升级请至应用商店更新")
+                        val updatePrompt = advisoryService.getPromptByCode("updateApp")
+                        return JsonResult.ok().put("prompt", updatePrompt.content)
                     }
                 }
                 return JsonResult.ok().put("prompt", null)
@@ -630,6 +631,20 @@
             JsonResult.error(e.message)
         }
     }
+
+    /**
+     * 获取提示信息
+     */
+    @RequestMapping(value = ["/prompt/get/{code}"], method = [RequestMethod.GET])
+    fun getPrompt(@PathVariable code: String): JsonResult? {
+        return try {
+            val prompt = advisoryService.getPromptByCode(code)
+            JsonResult.ok().put("prompt",prompt.content)
+        } catch (e: Exception) {
+            logger.error("获取提示信息异常",e)
+            JsonResult.ok().put("prompt","")
+        }
+    }
 }
 
 
@@ -802,7 +817,7 @@
         if (exsitUser != null) {
             return JsonResult.error("该银行卡号已被绑定，若您本人绑定，请先解除绑定，若非本人，请联系客服")
         }
-        val bindCardResult = userProxy.bindCard(BindCardParam().apply{
+        val bindCardResult = userProxy.bindCard(BindCardParam().apply {
             this.cardno = cardno
             this.name = name
             this.idtype = idtype
@@ -848,7 +863,7 @@
         if (user.phone.isNullOrEmpty()) {
             return JsonResult.error("手机号不存在，请注册")
         }
-        val bindCardCodeResult = userProxy.bindCardCode(user.userid!!,user.phone)
+        val bindCardCodeResult = userProxy.bindCardCode(user.userid!!, user.phone)
         if (bindCardCodeResult["retcode"] != 0) {
             logger.error { "获取绑卡验证码失败，${bindCardCodeResult["retmsg"]}" }
             return JsonResult.error("获取验证码失败，${bindCardCodeResult["retmsg"]}")
@@ -950,7 +965,7 @@
                 })
                 if (cardResponse.retcode != 0) {
                     logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
-                    return JsonResult.error(-1,"卡片不存在，请重新绑定")
+                    return JsonResult.error(-1, "卡片不存在，请重新绑定")
                 }
                 val card = cardResponse.card
                 if (card.signed) {
@@ -1040,7 +1055,7 @@
             this.userid = user.userid
             this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
         })
-        var card:QueryCardInfo? = null
+        var card: QueryCardInfo? = null
         if (cardResponse.retcode == 0) {
             card = cardResponse.card
         }
@@ -1233,7 +1248,7 @@
         }
         val card = cardResponse.card
         val personResponse = userProxy.queryPerson(user.userid)
-        if (personResponse.retcode!= 0) {
+        if (personResponse.retcode != 0) {
             logger.error { "查询用户[${user.userid}]信息失败:${personResponse.retmsg}" }
             return JsonResult.error("查询用户信息失败，请稍后重试")
         }
@@ -1307,10 +1322,10 @@
         val p = SecurityContextHolder.getContext().authentication
         val user = mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
-        if(TradeDict.STATUS_NORMAL!=user.status){
+        if (TradeDict.STATUS_NORMAL != user.status) {
             return JsonResult.error("用户状态异常")
         }
-        if(user.userid.isNullOrEmpty()){
+        if (user.userid.isNullOrEmpty()) {
             return JsonResult.error("用户未绑定身份")
         }
         val cardResponse = userProxy.queryCard(QueryCardParam().apply {
@@ -1319,10 +1334,10 @@
         })
         if (cardResponse.retcode != 0) {
             logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
-            return JsonResult.error(-1,"银行卡信息不存在，请重新绑定")
+            return JsonResult.error(-1, "银行卡信息不存在，请重新绑定")
         }
         if (!cardResponse.card.signed) {
-            return JsonResult.error(-1,"请先签约银行卡")
+            return JsonResult.error(-1, "请先签约银行卡")
         }
         val qrcodeResult = userProxy.qrcode(QrcodeParam().apply {
             this.uid = user.uid
@@ -1467,7 +1482,7 @@
      * 发布留言
      */
     @RequestMapping(value = ["/feedback/release"], method = [RequestMethod.POST])
-    fun releaseFeedback(@RequestBody bean: FeedbackBean,request:HttpServletRequest): JsonResult? {
+    fun releaseFeedback(@RequestBody bean: FeedbackBean, request: HttpServletRequest): JsonResult? {
         val p = SecurityContextHolder.getContext().authentication
         val user = mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
@@ -1480,7 +1495,7 @@
         if (!user.userid.isNullOrEmpty()) {
             feedback.userid = user.userid
         }
-        feedbackService.saveFeedback(feedback,bean.pictures)
+        feedbackService.saveFeedback(feedback, bean.pictures)
         return JsonResult.ok()
     }
 
@@ -1488,7 +1503,7 @@
      * 查询留言列表接口
      */
     @RequestMapping(value = ["/feedback/list"], method = [RequestMethod.GET])
-    fun getFeedbackList(pagesize:Int,pageno:Int): JsonResult? {
+    fun getFeedbackList(pagesize: Int, pageno: Int): JsonResult? {
         val p = SecurityContextHolder.getContext().authentication
         val user = mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
@@ -1497,27 +1512,27 @@
             this.pagesize = pagesize
             this.mobileid = user.uid
         })
-        return JsonResult.ok().put("data",data)
+        return JsonResult.ok().put("data", data)
     }
 
     /**
      * 查询单条留言详情
-    */
+     */
     @RequestMapping(value = ["/feedback/{fbid}"], method = [RequestMethod.GET])
-    fun getFeedbackDetail(@PathVariable fbid:String): JsonResult? {
+    fun getFeedbackDetail(@PathVariable fbid: String): JsonResult? {
         val p = SecurityContextHolder.getContext().authentication
         val user = mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
         val feedback = feedbackService.getFeedbackDetail(fbid, user.uid)
                 ?: return JsonResult.error("未找到该条留言")
-        return JsonResult.ok().put("data",feedback)
+        return JsonResult.ok().put("data", feedback)
     }
 
     /**
      * 删除留言
      */
     @RequestMapping(value = ["/feedback/delete/{fbid}"], method = [RequestMethod.POST])
-    fun deleteFeedback(@PathVariable fbid:String): JsonResult? {
+    fun deleteFeedback(@PathVariable fbid: String): JsonResult? {
         val p = SecurityContextHolder.getContext().authentication
         val user = mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
@@ -1530,8 +1545,8 @@
      * 查询用户总积分
      */
     @Suppress("UNCHECKED_CAST")
-    @RequestMapping(value = ["/point/total"],method = [RequestMethod.GET])
-    fun getTotalPoint():JsonResult?{
+    @RequestMapping(value = ["/point/total"], method = [RequestMethod.GET])
+    fun getTotalPoint(): JsonResult? {
         val p = SecurityContextHolder.getContext().authentication
         val user = mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
@@ -1541,12 +1556,12 @@
                 this.cardtype = ConstantUtil.CARDTYPE_CITIZENCARD
             })
             if (cardResponse.retcode != 0) {
-                return JsonResult.ok().put("data",0)
+                return JsonResult.ok().put("data", 0)
             }
             val card = cardResponse.card
             val personResponse = userProxy.queryPerson(card.userid)
             if (personResponse.retcode != 0) {
-                return JsonResult.ok().put("data",0)
+                return JsonResult.ok().put("data", 0)
             }
             val person = personResponse.person
             val pointResponse = userProxy.getUserPoints(UserPointsParam().apply {
@@ -1559,23 +1574,23 @@
                 logger.error { "查询用户[${user.userid}]积分失败" }
                 return JsonResult.error("查询积分失败")
             }
-            val page = pointResponse["page"] as LinkedHashMap<String,Any>
-            val data = page["data"] as ArrayList<LinkedHashMap<String,Any>>
+            val page = pointResponse["page"] as LinkedHashMap<String, Any>
+            val data = page["data"] as ArrayList<LinkedHashMap<String, Any>>
             if (data.isNotEmpty()) {
-                val pointsMain = data[0]["tPointsMain"] as LinkedHashMap<String,Any>
-                return JsonResult.ok().put("data",pointsMain["points"])
+                val pointsMain = data[0]["tPointsMain"] as LinkedHashMap<String, Any>
+                return JsonResult.ok().put("data", pointsMain["points"])
             }
-            return JsonResult.ok().put("data",0)
-        }else{
-            return JsonResult.ok().put("data",0)
+            return JsonResult.ok().put("data", 0)
+        } else {
+            return JsonResult.ok().put("data", 0)
         }
     }
 
     /**
      * 查询用户积分流水
      */
-    @RequestMapping(value = ["/point/flow"],method = [RequestMethod.GET])
-    fun getTotalPoint(pageno:Int,pagesize:Int):JsonResult?{
+    @RequestMapping(value = ["/point/flow"], method = [RequestMethod.GET])
+    fun getTotalPoint(pageno: Int, pagesize: Int): JsonResult? {
         val p = SecurityContextHolder.getContext().authentication
         val user = mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
@@ -1588,12 +1603,12 @@
                 this.cardtype = ConstantUtil.CARDTYPE_CITIZENCARD
             })
             if (cardResponse.retcode != 0) {
-                return JsonResult.ok().put("data",emptyResult)
+                return JsonResult.ok().put("data", emptyResult)
             }
             val card = cardResponse.card
             val personResponse = userProxy.queryPerson(card.userid)
             if (personResponse.retcode != 0) {
-                return JsonResult.ok().put("data",emptyResult)
+                return JsonResult.ok().put("data", emptyResult)
             }
             val person = personResponse.person
             val pointResponse = userProxy.getUserPoints(UserPointsParam().apply {
@@ -1606,17 +1621,17 @@
                 logger.error { "查询用户[${user.userid}]积分流水失败" }
                 return JsonResult.error("查询积分流水失败")
             }
-            return JsonResult.ok().put("data",pointResponse["page"])
-        }else{
-            return JsonResult.ok().put("data",emptyResult)
+            return JsonResult.ok().put("data", pointResponse["page"])
+        } else {
+            return JsonResult.ok().put("data", emptyResult)
         }
     }
 
     /**
      * 完成积分任务
      */
-    @RequestMapping(value = ["/point/task/{taskcode}"],method = [RequestMethod.POST])
-    fun completePointTask(@PathVariable taskcode:String):JsonResult?{
+    @RequestMapping(value = ["/point/task/{taskcode}"], method = [RequestMethod.POST])
+    fun completePointTask(@PathVariable taskcode: String): JsonResult? {
         try {
             val p = SecurityContextHolder.getContext().authentication
             val user = mobileApiService.findUserById(p.name)
@@ -1627,7 +1642,7 @@
                     logger.error { "查询用户[${user.userid}]信息失败:${personResponse.retmsg}" }
                     return JsonResult.error("查询用户信息失败，请稍后重试")
                 }
-                return userService.completePointTask(user,taskcode)
+                return userService.completePointTask(user, taskcode)
             } else {
                 return JsonResult.error("未绑定银行卡，不能获取积分")
             }
@@ -1635,7 +1650,7 @@
             if (e is PortalBusinessException) {
                 return JsonResult.error(e.message)
             }
-            logger.error("系统异常",e)
+            logger.error("系统异常", e)
             return JsonResult.error("服务器繁忙，请稍后重试")
         }
     }
@@ -1643,19 +1658,19 @@
     /**
      * 查询积分状态
      */
-    @RequestMapping(value = ["/point/taskstatus"],method = [RequestMethod.GET])
-    fun completePointTask():JsonResult?{
+    @RequestMapping(value = ["/point/taskstatus"], method = [RequestMethod.GET])
+    fun completePointTask(): JsonResult? {
         try {
             val p = SecurityContextHolder.getContext().authentication
             val user = mobileApiService.findUserById(p.name)
                     ?: return JsonResult.error("用户不存在，请注册")
             val result = userService.queryPointTaskStatus(user)
-            return JsonResult.ok().put("data",result)
+            return JsonResult.ok().put("data", result)
         } catch (e: Exception) {
             if (e is PortalBusinessException) {
                 return JsonResult.error(e.message)
             }
-            logger.error("系统异常",e)
+            logger.error("系统异常", e)
             return JsonResult.error("服务器繁忙，请稍后重试")
         }
     }
@@ -1678,7 +1693,7 @@
      * 发送邮件
      */
     @RequestMapping(value = ["/email/send"], method = [RequestMethod.POST])
-    fun sendEmail(email: String,type: String): JsonResult? {
+    fun sendEmail(email: String, type: String): JsonResult? {
         return try {
             if (!email.matches(Regex("^[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}$"))) {
                 return JsonResult.error("邮箱格式错误，请检查后再试")
@@ -1764,7 +1779,7 @@
     fun getAllSecretSecurity(): JsonResult? {
         return try {
             val data = secretSecurityService.getAllSecretSecurity()
-            JsonResult.ok().put("data",data)
+            JsonResult.ok().put("data", data)
         } catch (e: Exception) {
             if (e is PortalBusinessException) {
                 return JsonResult.error(e.message)
@@ -1857,5 +1872,5 @@
         }
     }
 
-    
+
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
index 6670dca..a8745f8 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
@@ -1,7 +1,6 @@
 package com.supwisdom.dlpay.portal
 
 import com.supwisdom.dlpay.api.bean.JsonResult
-import com.supwisdom.dlpay.api.bean.QueryUserParam
 import com.supwisdom.dlpay.api.service.UploadPicService
 import com.supwisdom.dlpay.framework.core.JwtConfig
 import com.supwisdom.dlpay.framework.core.JwtTokenUtil
@@ -284,7 +283,7 @@
      * 获取轮播图列表
      */
     @RequestMapping("/column/bannerlist")
-    fun getBannerList(bean: BannerSearchBean): JsonResult? {
+    fun getBannerList(bean: PageSearchBean): JsonResult? {
         return try {
             val page = columnService.getBannerList(bean)
             if (page.list == null || page.list.size == 0) {
@@ -603,7 +602,7 @@
      * 重置管理员密码
      */
     @RequestMapping(value = ["/operator/resetpwd/{operid}"], method = [RequestMethod.POST])
-    fun resetPassword(@PathVariable operid:String): JsonResult? {
+    fun resetPassword(@PathVariable operid: String): JsonResult? {
         return try {
             operatorDetailService.resetPassword(operid)
             JsonResult.ok()
@@ -618,7 +617,7 @@
      */
     @RequestMapping(value = ["/operator/switchstatus/{operid}"], method = [RequestMethod.POST])
     fun switchStatus(@PathVariable(value = "operid") operid: String,
-                          @RequestParam(value = "status") status: String): JsonResult? {
+                     @RequestParam(value = "status") status: String): JsonResult? {
         return try {
             val result = operatorDetailService.switchStatus(operid, status)
             JsonResult.ok().put("result", result)
@@ -644,4 +643,59 @@
             JsonResult.error("查询操作员列表失败")
         }
     }
+
+    /**
+     * 保存提示
+     */
+    @RequestMapping(value = ["/prompt/save"], method = [RequestMethod.POST])
+    fun savePrompt(@RequestBody prompt: TBPrompt): JsonResult? {
+        return try {
+            advisoryService.savePrompt(prompt)
+            JsonResult.ok()
+        } catch (e: Exception) {
+            logger.error("保存提示异常", e)
+            if (e is PortalBusinessException) {
+                return JsonResult.error(e.message)
+            }
+            JsonResult.error("保存提示失败")
+        }
+    }
+
+    /**
+     * 获取提示列表
+     */
+    @RequestMapping(value = ["/prompt/list"], method = [RequestMethod.GET])
+    fun getPromptList(bean: PageSearchBean): JsonResult? {
+        return try {
+            val page = advisoryService.getPromptList(bean)
+            if (page.list == null || page.list.size == 0) {
+                return JsonResult.ok().put("msg", "无数据")
+            }
+            JsonResult.ok().put("page", page)
+        } catch (e: Exception) {
+            logger.error("获取提示列表异常", e)
+            if (e is PortalBusinessException) {
+                return JsonResult.error(e.message)
+            }
+            JsonResult.error("获取提示列表失败")
+        }
+    }
+
+    /**
+     * 删除提示
+     */
+    @RequestMapping(value = ["/prompt/delete/{promptid}"], method = [RequestMethod.POST])
+    fun deletePrompt(@PathVariable promptid: String): JsonResult? {
+        return try {
+            advisoryService.deletePrompt(promptid)
+            JsonResult.ok()
+        } catch (e: Exception) {
+            logger.error("删除提示异常", e)
+            if (e is PortalBusinessException) {
+                return JsonResult.error(e.message)
+            }
+            JsonResult.error("删除提示失败")
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/BannerSearchBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/PageSearchBean.kt
similarity index 78%
rename from backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/BannerSearchBean.kt
rename to backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/PageSearchBean.kt
index 4eee697..e5d1b48 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/BannerSearchBean.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/PageSearchBean.kt
@@ -1,6 +1,6 @@
 package com.supwisdom.dlpay.portal.bean
 
-class BannerSearchBean {
+class PageSearchBean {
     var pageno: Int = 0
     var pagesize: Int = 10
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryRepository.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryRepository.kt
index cfd40a2..00c611c 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryRepository.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryRepository.kt
@@ -2,8 +2,10 @@
 
 import com.supwisdom.dlpay.framework.jpa.page.Pagination
 import com.supwisdom.dlpay.portal.bean.AdvisorySearchBean
+import com.supwisdom.dlpay.portal.bean.PageSearchBean
 
 interface AdvisoryRepository {
     fun getAdvisoryList(bean: AdvisorySearchBean): Pagination
     fun getMobileAdvisoryList(pageno: Int, pagesize: Int): Pagination
+    fun getPromptList(bean: PageSearchBean): Pagination
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ColumnRepository.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ColumnRepository.kt
index d704e94..9da2c05 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ColumnRepository.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ColumnRepository.kt
@@ -1,12 +1,12 @@
 package com.supwisdom.dlpay.portal.dao
 
 import com.supwisdom.dlpay.framework.jpa.page.Pagination
-import com.supwisdom.dlpay.portal.bean.BannerSearchBean
+import com.supwisdom.dlpay.portal.bean.PageSearchBean
 import com.supwisdom.dlpay.portal.bean.ColumnSearchBean
 import com.supwisdom.dlpay.portal.domain.TBBanner
 
 interface ColumnRepository {
     fun getColumnList(bean: ColumnSearchBean): Pagination
-    fun getBannerList(bean: BannerSearchBean): Pagination
+    fun getBannerList(bean: PageSearchBean): Pagination
     fun getAllBanner(): List<TBBanner>
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/PromptDao.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/PromptDao.kt
new file mode 100644
index 0000000..ac3b743
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/PromptDao.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.portal.dao
+
+import com.supwisdom.dlpay.portal.domain.TBPrompt
+import org.springframework.data.jpa.repository.JpaRepository
+import org.springframework.stereotype.Repository
+
+@Repository
+interface PromptDao : JpaRepository<TBPrompt, String> {
+    fun findByCode(code: String): TBPrompt?
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/AdvisoryService.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/AdvisoryService.kt
index 832a6ba..5bdf8ee 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/AdvisoryService.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/AdvisoryService.kt
@@ -2,18 +2,36 @@
 
 import com.supwisdom.dlpay.framework.jpa.page.Pagination
 import com.supwisdom.dlpay.portal.bean.AdvisorySearchBean
+import com.supwisdom.dlpay.portal.bean.PageSearchBean
 import com.supwisdom.dlpay.portal.domain.TBAdvisory
+import com.supwisdom.dlpay.portal.domain.TBPrompt
 import org.springframework.transaction.annotation.Transactional
 
 interface AdvisoryService {
     @Transactional
-    fun saveAdvisory(advisory:TBAdvisory)
+    fun saveAdvisory(advisory: TBAdvisory)
+
     @Transactional
     fun getAdvisoryList(bean: AdvisorySearchBean): Pagination
+
     @Transactional
-    fun switchDisplay(advisoryid:String,value:String):String
+    fun switchDisplay(advisoryid: String, value: String): String
+
     @Transactional
-    fun deleteAdvisory(advisoryid:String)
+    fun deleteAdvisory(advisoryid: String)
+
     @Transactional
-    fun getMobileAdvisoryList(pageno:Int,pagesize:Int): Pagination
+    fun getMobileAdvisoryList(pageno: Int, pagesize: Int): Pagination
+
+    @Transactional
+    fun savePrompt(prompt: TBPrompt)
+
+    @Transactional
+    fun getPromptList(bean: PageSearchBean): Pagination
+
+    @Transactional
+    fun deletePrompt(promptid: String)
+
+    @Transactional
+    fun getPromptByCode(code: String): TBPrompt
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/ColumnService.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/ColumnService.kt
index 82bd5db..89f2e56 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/ColumnService.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/ColumnService.kt
@@ -1,7 +1,7 @@
 package com.supwisdom.dlpay.portal.service
 
 import com.supwisdom.dlpay.framework.jpa.page.Pagination
-import com.supwisdom.dlpay.portal.bean.BannerSearchBean
+import com.supwisdom.dlpay.portal.bean.PageSearchBean
 import com.supwisdom.dlpay.portal.bean.ColumnSearchBean
 import com.supwisdom.dlpay.portal.domain.TBBanner
 import com.supwisdom.dlpay.portal.domain.TBColumn
@@ -18,7 +18,7 @@
     fun getColumnList(bean: ColumnSearchBean): Pagination
 
     @Transactional
-    fun getBannerList(bean: BannerSearchBean): Pagination
+    fun getBannerList(bean: PageSearchBean): Pagination
 
     @Transactional(readOnly = true)
     fun getAllBanner():List<TBBanner>
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/AdvisoryServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/AdvisoryServiceImpl.kt
index 2e72d93..eb48c36 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/AdvisoryServiceImpl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/AdvisoryServiceImpl.kt
@@ -2,20 +2,26 @@
 
 import com.supwisdom.dlpay.framework.jpa.page.Pagination
 import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.mobile.exception.PortalBusinessException
 import com.supwisdom.dlpay.portal.bean.AdvisorySearchBean
+import com.supwisdom.dlpay.portal.bean.PageSearchBean
 import com.supwisdom.dlpay.portal.dao.AdvisoryDao
+import com.supwisdom.dlpay.portal.dao.PromptDao
 import com.supwisdom.dlpay.portal.domain.TBAdvisory
+import com.supwisdom.dlpay.portal.domain.TBPrompt
 import com.supwisdom.dlpay.portal.service.AdvisoryService
 import com.supwisdom.dlpay.portal.util.PortalConstant
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 
 @Service
-class AdvisoryServiceImpl : AdvisoryService{
+class AdvisoryServiceImpl : AdvisoryService {
     @Autowired
     lateinit var systemUtilService: SystemUtilService
     @Autowired
     lateinit var advisoryDao: AdvisoryDao
+    @Autowired
+    lateinit var promptDao: PromptDao
 
     override fun saveAdvisory(advisory: TBAdvisory) {
         advisory.updatetime = systemUtilService.sysdatetime.hostdatetime
@@ -34,7 +40,7 @@
             advisory.isdisplay = value
             advisoryDao.save(advisory)
             return advisory.isdisplay
-        }else{
+        } else {
             throw RuntimeException("ID为：[${advisoryid}]的问答未找到")
         }
     }
@@ -43,12 +49,51 @@
         val optional = advisoryDao.findById(advisoryid)
         if (optional.isPresent) {
             advisoryDao.delete(optional.get())
-        }else{
+        } else {
             throw RuntimeException("ID为：[${advisoryid}]的问答未找到")
         }
     }
 
     override fun getMobileAdvisoryList(pageno: Int, pagesize: Int): Pagination {
-        return advisoryDao.getMobileAdvisoryList(pageno,pagesize)
+        return advisoryDao.getMobileAdvisoryList(pageno, pagesize)
+    }
+
+    override fun savePrompt(prompt: TBPrompt) {
+        prompt.updatetime = systemUtilService.sysdatetime.hostdatetime
+        if (prompt.id.isNullOrEmpty()) {
+            val codePrompt = promptDao.findByCode(prompt.code)
+            if (codePrompt != null) {
+                throw PortalBusinessException("已存在编号为[${prompt.code}]的提示，请更换")
+            }
+            promptDao.save(prompt)
+        } else {
+            // 修改时不能修改编号
+            val optional = promptDao.findById(prompt.id)
+            if (!optional.isPresent) {
+                throw PortalBusinessException("未找到id为[${prompt.id}]的提示，修改失败")
+            }
+            val tbPrompt = optional.get()
+            tbPrompt.title = prompt.title
+            tbPrompt.content = prompt.content
+            tbPrompt.updatetime = prompt.updatetime
+            promptDao.save(tbPrompt)
+        }
+    }
+
+    override fun getPromptList(bean: PageSearchBean): Pagination {
+        return advisoryDao.getPromptList(bean)
+    }
+
+    override fun deletePrompt(promptid: String) {
+        val optional = promptDao.findById(promptid)
+        if (!optional.isPresent) {
+            throw PortalBusinessException("未找到id为${promptid}的提示")
+        }
+        promptDao.delete(optional.get())
+    }
+
+    override fun getPromptByCode(code: String): TBPrompt {
+        return promptDao.findByCode(code)
+                ?: throw PortalBusinessException("未找到code为[${code}]的提示")
     }
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/ColumnServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/ColumnServiceImpl.kt
index 6985f35..7f258bc 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/ColumnServiceImpl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/ColumnServiceImpl.kt
@@ -3,7 +3,7 @@
 import com.supwisdom.dlpay.framework.jpa.page.Pagination
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.StringUtil
-import com.supwisdom.dlpay.portal.bean.BannerSearchBean
+import com.supwisdom.dlpay.portal.bean.PageSearchBean
 import com.supwisdom.dlpay.portal.bean.ColumnSearchBean
 import com.supwisdom.dlpay.portal.dao.ArticleDao
 import com.supwisdom.dlpay.portal.dao.BannerDao
@@ -32,7 +32,7 @@
         return columnDao.getColumnList(bean)
     }
 
-    override fun getBannerList(bean: BannerSearchBean): Pagination {
+    override fun getBannerList(bean: PageSearchBean): Pagination {
         return columnDao.getBannerList(bean)
     }
 
@@ -52,11 +52,10 @@
 
     override fun deleteBanner(bannerid: String) {
         val optional = bannerDao.findById(bannerid)
-        if (optional.isPresent) {
-            bannerDao.delete(optional.get())
-        } else {
-            throw RuntimeException("为找到id为：[$bannerid]的轮播图")
+        if (!optional.isPresent) {
+            throw RuntimeException("未找到id为：[$bannerid]的轮播图")
         }
+        bannerDao.delete(optional.get())
     }
 
     override fun getAllColumnList(): List<TBColumn>? {
diff --git a/backend/src/main/resources/data-postgresql.sql b/backend/src/main/resources/data-postgresql.sql
index ee77003..56fe683 100644
--- a/backend/src/main/resources/data-postgresql.sql
+++ b/backend/src/main/resources/data-postgresql.sql
@@ -79,6 +79,11 @@
 INSERT INTO "tb_secret_security"("ssid", "createtime", "question", "sort") VALUES ('8721e26b78044749b75dc2bc19882c9f', '20210106160653', '您最熟悉的童年好友名字是？', 9);
 INSERT INTO "tb_secret_security"("ssid", "createtime", "question", "sort") VALUES ('b46cd79c01804250a2bedea089356406', '20210106160653', '您小学班主任的名字是？', 10);
 
+INSERT INTO "public"."tb_prompt"("id", "code", "content", "title", "updatetime") VALUES ('2c9cab9477d2fa1d0177d2fcd01f0001', 'rights', '1.公交乘车：普通卡9折、爱心卡、学生卡原价5折；阳光卡、老年卡每年享1500次免费乘坐。
+2.市民卡日（每月第一周的周六周日）：到指定商户消费享受最低5折优惠。', '卡应用-我的权益-提示', '20210224161235');
+INSERT INTO "public"."tb_prompt"("id", "code", "content", "title", "updatetime") VALUES ('2c9cab9477d2fa1d0177d315676c0002', 'pointRules', '1.积分不得转让或买卖
+2.请正确合理使用积分', '我的积分-活动规则-提示', '20210224161249');
+INSERT INTO "public"."tb_prompt"("id", "code", "content", "title", "updatetime") VALUES ('2c9cab9477d328a70177d32c2a9b0001', 'updateApp', '您当前使用的应用不是最新版本，如要升级请至应用商店更新', 'App升级-提示', '20210224163342');
 
 
 
diff --git a/frontend/src/api/advisory.js b/frontend/src/api/advisory.js
index db9ed14..b48892f 100644
--- a/frontend/src/api/advisory.js
+++ b/frontend/src/api/advisory.js
@@ -30,3 +30,26 @@
     params: value
   })
 }
+
+export function savePrompt(data) {
+  return request({
+    url: '/prompt/save',
+    method: 'post',
+    data
+  })
+}
+
+export function getPromptList(query) {
+  return request({
+    url: '/prompt/list',
+    method: 'get',
+    params: query
+  })
+}
+
+export function deletePrompt(promptid) {
+  return request({
+    url: '/prompt/delete/' + promptid,
+    method: 'post'
+  })
+}
diff --git a/frontend/src/views/advisory/index.vue b/frontend/src/views/advisory/index.vue
index 7b24d62..3569fbb 100644
--- a/frontend/src/views/advisory/index.vue
+++ b/frontend/src/views/advisory/index.vue
@@ -1,131 +1,233 @@
 <template>
   <div class="app-container">
-    <div class="filter-container">
-      <div class="filter-item" style="margin-right:15px">问答标题</div>
-      <el-input
-        v-model="formData.title"
-        placeholder="咨询问答标题"
-        style="width: 350px;margin-right:50px"
-        class="filter-item"
-      />
-      <div class="filter-item" style="margin-right:15px">问答内容</div>
-      <el-input
-        v-model="formData.content"
-        placeholder="咨询问答内容"
-        style="width: 350px;margin-right:50px"
-        class="filter-item"
-      />
-      <el-button
-        class="filter-item"
-        type="primary"
-        icon="el-icon-search"
-        @click="handleFilter()"
-      >
-        搜索
+    <div v-show="!promptSet">
+      <div class="filter-container">
+        <div class="filter-item" style="margin-right:15px">问答标题</div>
+        <el-input
+          v-model="formData.title"
+          placeholder="咨询问答标题"
+          style="width: 350px;margin-right:50px"
+          class="filter-item"
+        />
+        <div class="filter-item" style="margin-right:15px">问答内容</div>
+        <el-input
+          v-model="formData.content"
+          placeholder="咨询问答内容"
+          style="width: 350px;margin-right:50px"
+          class="filter-item"
+        />
+        <el-button
+          class="filter-item"
+          type="primary"
+          icon="el-icon-search"
+          @click="handleFilter()"
+        >
+          搜索
+        </el-button>
+      </div>
+      <el-button type="primary" icon="el-icon-circle-plus-outline" @click="addAdvisory()">
+        新增问答
       </el-button>
-    </div>
-    <el-button type="primary" icon="el-icon-circle-plus-outline" @click="addAdvisory()">
-      新增问答
-    </el-button>
-    <el-table
-      :key="tableKey"
-      v-loading="listLoading"
-      :data="list"
-      border
-      fit
-      highlight-current-row
-      style="width: 100%;margin-top:10px"
-    >
-      <el-table-column label="问答标题" width="150" align="center">
-        <template slot-scope="{row}">
-          <span>{{ row.title }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="问答内容" align="center">
-        <template slot-scope="{row}">
-          <span>{{ row.content }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="修改日期" align="center" width="160">
-        <template slot-scope="{row}">
-          <span>{{ dateFormat(row.updatetime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="排序" width="80" align="center">
-        <template slot-scope="{row}">
-          <span>{{ row.ordernum }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column width="100px" label="是否展示" align="center">
-        <template slot-scope="{row}">
-          <el-switch
-            :value="row.isdisplay === '1'"
-            active-color="#13ce66"
-            inactive-color="#a7a7a7"
-            @click.native.prevent="switchDisplay(row)"
-          />
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center" width="100">
-        <template slot-scope="{row}">
-          <el-tooltip class="item" effect="dark" content="修改" placement="bottom">
-            <el-button type="primary" icon="el-icon-edit" circle size="mini" @click="updateAdvisory(row)" />
-          </el-tooltip>
-          <el-tooltip class="item" effect="dark" content="删除" placement="bottom">
-            <el-button type="danger" icon="el-icon-delete" circle size="mini" @click="deleteAdvisory(row)" />
-          </el-tooltip>
-        </template>
-      </el-table-column>
-    </el-table>
+      <el-button type="primary" icon="el-icon-info" style="float:right" @click="setPrompt()">
+        提示设置
+      </el-button>
+      <el-table
+        :key="tableKey"
+        v-loading="listLoading"
+        :data="list"
+        border
+        fit
+        highlight-current-row
+        style="width: 100%;margin-top:10px"
+      >
+        <el-table-column label="问答标题" width="150" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.title }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="问答内容" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.content }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="修改日期" align="center" width="160">
+          <template slot-scope="{row}">
+            <span>{{ dateFormat(row.updatetime) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="排序" width="80" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.ordernum }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column width="100px" label="是否展示" align="center">
+          <template slot-scope="{row}">
+            <el-switch
+              :value="row.isdisplay === '1'"
+              active-color="#13ce66"
+              inactive-color="#a7a7a7"
+              @click.native.prevent="switchDisplay(row)"
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="100">
+          <template slot-scope="{row}">
+            <el-tooltip class="item" effect="dark" content="修改" placement="bottom">
+              <el-button type="primary" icon="el-icon-edit" circle size="mini" @click="updateAdvisory(row)" />
+            </el-tooltip>
+            <el-tooltip class="item" effect="dark" content="删除" placement="bottom">
+              <el-button type="danger" icon="el-icon-delete" circle size="mini" @click="deleteAdvisory(row)" />
+            </el-tooltip>
+          </template>
+        </el-table-column>
+      </el-table>
 
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="formData.pageno"
-      :limit.sync="formData.pagesize"
-      style="margin-top:0;"
-      @pagination="getAdvisoryList"
-    />
-    <el-dialog
-      :title="title"
-      :visible.sync="advisoryDialogVisible"
-      width="45%"
-    >
-      <div>
-        <el-form ref="advisoryForm" :model="advisoryForm" :rules="rules" label-width="100px">
-          <el-form-item label="问答标题" prop="title" class="form-input-item">
+      <pagination
+        v-show="total>0"
+        :total="total"
+        :page.sync="formData.pageno"
+        :limit.sync="formData.pagesize"
+        style="margin-top:0;"
+        @pagination="getAdvisoryList"
+      />
+      <el-dialog
+        :title="title"
+        :visible.sync="advisoryDialogVisible"
+        width="45%"
+      >
+        <div>
+          <el-form ref="advisoryForm" :model="advisoryForm" :rules="rules" label-width="100px">
+            <el-form-item label="问答标题" prop="title" class="form-input-item">
+              <el-input
+                v-model="advisoryForm.title"
+                maxlength="30"
+                show-word-limit
+                style="width:80%"
+              />
+            </el-form-item>
+            <el-form-item label="问答排序" prop="ordernum">
+              <el-input-number v-model="advisoryForm.ordernum" :min="1" style="width:40%" />
+            </el-form-item>
+            <el-form-item label="问答内容" prop="content">
+              <el-input
+                v-model="advisoryForm.content"
+                type="textarea"
+                maxlength="230"
+                :rows="8"
+                placeholder=""
+                show-word-limit
+                style="width:80%"
+              />
+            </el-form-item>
+          </el-form>
+        </div>
+        <div style="text-align:center">
+          <el-button
+            type="primary"
+            @click="saveAdvisory('advisoryForm')"
+          >保存
+          </el-button>
+          <el-button @click="advisoryDialogVisible = false">取消</el-button>
+        </div>
+      </el-dialog>
+    </div>
+
+    <div v-show="promptSet">
+      <el-button type="primary" icon="el-icon-info" @click="addPrompt()">
+        新增提示
+      </el-button>
+      <el-button type="primary" icon="el-icon-back" style="float:right" @click="promptSet=false">
+        返回
+      </el-button>
+      <el-table
+        :key="promptTableKey"
+        :data="promptList"
+        border
+        fit
+        highlight-current-row
+        style="width: 100%;margin-top:10px"
+      >
+        <el-table-column label="提示标题" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.title }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="提示编号" width="150" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.code }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="修改日期" align="center" width="160">
+          <template slot-scope="{row}">
+            <span>{{ dateFormat(row.updatetime) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="180">
+          <template slot-scope="{row}">
+            <el-tooltip class="item" effect="dark" content="修改" placement="bottom">
+              <el-button type="primary" icon="el-icon-edit" circle size="mini" @click="updatePrompt(row)" />
+            </el-tooltip>
+            <el-tooltip class="item" effect="dark" content="删除" placement="bottom">
+              <el-button type="danger" icon="el-icon-delete" circle size="mini" @click="deletePrompt(row)" />
+            </el-tooltip>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-show="promptTotal>0"
+        :total="promptTotal"
+        :page.sync="promptFormData.pageno"
+        :limit.sync="promptFormData.pagesize"
+        style="margin-top:0;"
+        @pagination="getPromptList"
+      />
+      <el-dialog
+        :title="promptTitle"
+        :visible.sync="promptDialogVisible"
+        width="40%"
+        @close="promptDialogVisible = false"
+      >
+        <el-form ref="promptForm" style="margin:20px 0 0 35px" label-width="100px" :rules="promptRule" :model="promptForm">
+          <el-form-item label="提示标题" prop="title" class="form-input-item">
             <el-input
-              v-model="advisoryForm.title"
-              maxlength="30"
+              v-model="promptForm.title"
+              maxlength="50"
               show-word-limit
+              placeholder="请输入提示标题"
               style="width:80%"
             />
           </el-form-item>
-          <el-form-item label="问答排序" prop="ordernum">
-            <el-input-number v-model="advisoryForm.ordernum" :min="1" style="width:40%" />
-          </el-form-item>
-          <el-form-item label="问答内容" prop="content">
+          <el-form-item label="提示编号" prop="code" class="form-input-item">
             <el-input
-              v-model="advisoryForm.content"
-              type="textarea"
-              maxlength="230"
-              :rows="8"
-              placeholder=""
+              v-model="promptForm.code"
+              maxlength="20"
               show-word-limit
+              :disabled="updatePromptFlag"
+              placeholder="请输入提示编号"
+              style="width:80%"
+            />
+          </el-form-item>
+          <el-form-item label="提示内容" prop="content">
+            <el-input
+              v-model="promptForm.content"
+              type="textarea"
+              maxlength="1000"
+              :rows="8"
+              placeholder="请输入提示内容"
               style="width:80%"
             />
           </el-form-item>
         </el-form>
-      </div>
-      <div style="text-align:center">
-        <el-button
-          type="primary"
-          @click="saveAdvisory('advisoryForm')"
-        >保存
-        </el-button>
-        <el-button @click="advisoryDialogVisible = false">取消</el-button>
-      </div>
-    </el-dialog>
+        <div style="text-align:center">
+          <el-button
+            type="primary"
+            @click="savePrompt('promptForm')"
+          >保存
+          </el-button>
+          <el-button @click="promptDialogVisible = false">取消</el-button>
+        </div>
+      </el-dialog>
+    </div>
   </div>
 </template>
 <script>
@@ -133,7 +235,10 @@
   saveAdvisory,
   getAdvisoryList,
   switchDisplay,
-  deleteAdvisory
+  deleteAdvisory,
+  savePrompt,
+  getPromptList,
+  deletePrompt
 } from '@/api/advisory'
 import moment from 'moment'
 import Pagination from '@/components/Pagination'
@@ -144,6 +249,8 @@
   },
   data() {
     return {
+      promptSet: false,
+      updatePromptFlag: true,
       advisoryDialogVisible: false,
       formData: {
         title: '',
@@ -151,10 +258,17 @@
         pageno: 1,
         pagesize: 10
       },
+      promptFormData: {
+        pageno: 1,
+        pagesize: 10
+      },
       listLoading: false,
       tableKey: 0,
       list: null,
+      promptTableKey: 1,
+      promptList: null,
       total: 0,
+      promptTotal: 0,
       title: '',
       advisoryForm: {
         advisoryid: '',
@@ -162,6 +276,14 @@
         content: '',
         ordernum: 1
       },
+      promptForm: {
+        id: '',
+        title: '',
+        code: '',
+        content: ''
+      },
+      promptTitle: '新增提示',
+      promptDialogVisible: false,
       rules: {
         title: [
           { required: true, message: '请输入问答标题', trigger: 'blur' }
@@ -169,6 +291,17 @@
         content: [
           { required: true, message: '请输入问答内容', trigger: 'blur' }
         ]
+      },
+      promptRule: {
+        title: [
+          { required: true, message: '请输入提示标题', trigger: 'blur' }
+        ],
+        code: [
+          { required: true, message: '请输入提示代码', trigger: 'blur' }
+        ],
+        content: [
+          { required: true, message: '请输入提示内容', trigger: 'blur' }
+        ]
       }
     }
   },
@@ -238,6 +371,17 @@
         this.$refs[formName].clearValidate()
       })
     },
+    resetPromptForm(formName) {
+      this.promptForm = {
+        id: '',
+        title: '',
+        code: '',
+        content: ''
+      }
+      this.$nextTick(() => {
+        this.$refs[formName].clearValidate()
+      })
+    },
     updateAdvisory(row) {
       this.title = '修改问答'
       this.resetForm('advisoryForm')
@@ -286,6 +430,91 @@
         })
       }).catch(() => {
       })
+    },
+    setPrompt() {
+      this.promptFormData.pageno = 1
+      this.getPromptList()
+      this.promptSet = true
+    },
+    getPromptList() {
+      getPromptList(this.promptFormData).then(response => {
+        if (response.page) {
+          this.promptList = response.page.list
+          this.promptTotal = response.page.totalCount
+        } else {
+          this.promptList = null
+          this.promptTotal = 0
+        }
+      }).catch(error => {
+        this.$message({
+          message: error.msg || '请求异常',
+          type: 'error'
+        })
+      })
+    },
+    addPrompt() {
+      this.promptTitle = '新增提示'
+      this.resetPromptForm('promptForm')
+      this.promptDialogVisible = true
+      this.updatePromptFlag = false
+    },
+    savePrompt(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          savePrompt(this.promptForm).then(response => {
+            this.$notify({
+              title: '成功',
+              message: '保存成功！',
+              type: 'success',
+              duration: 2000
+            })
+            this.promptDialogVisible = false
+            this.getPromptList()
+          }).catch(error => {
+            this.$message({
+              message: error.msg || '请求异常',
+              type: 'error'
+            })
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    updatePrompt(row) {
+      this.promptForm = {
+        id: '',
+        title: '',
+        code: '',
+        content: ''
+      }
+      this.promptTitle = '修改提示'
+      this.resetPromptForm('promptForm')
+      this.promptForm = Object.assign({}, row)
+      this.promptDialogVisible = true
+      this.updatePromptFlag = true
+    },
+    deletePrompt(row) {
+      this.$confirm('是否确认删除该提示?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        deletePrompt(row.id).then(response => {
+          this.$message({
+            type: 'success',
+            message: '删除成功!'
+          })
+          this.promptFormData.pageno = 1
+          this.getPromptList()
+        }).catch(error => {
+          this.$message({
+            message: error.msg || '请求异常',
+            type: 'error'
+          })
+        })
+      }).catch(() => {
+      })
     }
   }
 }
diff --git a/frontend/src/views/article/components/ArticleDetail.vue b/frontend/src/views/article/components/ArticleDetail.vue
index 7a6139d..fefa8f5 100644
--- a/frontend/src/views/article/components/ArticleDetail.vue
+++ b/frontend/src/views/article/components/ArticleDetail.vue
@@ -33,13 +33,10 @@
                 标题
               </MDinput>
             </el-form-item>
-            <el-form-item label="排序" prop="ordernum">
-              <el-input-number v-model="postForm.ordernum" :min="1" style="width:20%" />
-            </el-form-item>
 
             <div class="postInfo-container">
               <el-row>
-                <el-col :span="8">
+                <el-col :span="7">
                   <el-form-item label-width="100px" prop="columnid" label="所属栏目:" class="postInfo-container-item">
                     <el-select
                       v-model="postForm.columnid"
@@ -58,6 +55,11 @@
                     </el-select>
                   </el-form-item>
                 </el-col>
+                <el-col :span="8">
+                  <el-form-item label="排序" prop="ordernum" label-width="100px" class="postInfo-container-item">
+                    <el-input-number v-model="postForm.ordernum" :min="1" />
+                  </el-form-item>
+                </el-col>
               </el-row>
             </div>
           </el-col>
@@ -158,6 +160,9 @@
     fetchData(id) {
       getArticle(id).then(response => {
         this.postForm = response.article
+        if (response.article.ordernum == null) {
+          this.postForm.ordernum = undefined
+        }
         console.log(response)
 
         // set tagsview title
diff --git a/frontend/src/views/article/list.vue b/frontend/src/views/article/list.vue
index 670e682..f879a93 100644
--- a/frontend/src/views/article/list.vue
+++ b/frontend/src/views/article/list.vue
@@ -8,20 +8,19 @@
         style="width: 320px;margin-right:50px"
         class="filter-item"
       />
-      <div class="filter-item" style="margin-right:15px">发布日期</div>
-      <el-date-picker
-        v-model="releaseDate"
-        type="daterange"
-        align="left"
-        style="width:320px;margin-right:50px"
-        unlink-panels
-        range-separator="至"
-        start-placeholder="开始日期"
-        end-placeholder="结束日期"
-        value-format="yyyyMMdd"
-        :picker-options="pickerOptions"
+      <div class="filter-item" style="margin-right:15px">文章状态</div>
+      <el-select
+        v-model="formData.status"
+        style="width:200px;margin-right:50px"
         class="filter-item"
-      />
+      >
+        <el-option
+          v-for="item in statusOptions"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value"
+        />
+      </el-select>
     </div>
     <div class="filter-container">
       <div class="filter-item" style="margin-right:15px">保存日期</div>
@@ -38,19 +37,20 @@
         :picker-options="pickerOptions"
         class="filter-item"
       />
-      <div class="filter-item" style="margin-right:15px">文章状态</div>
-      <el-select
-        v-model="formData.status"
-        style="width:200px;margin-right:120px"
+      <div class="filter-item" style="margin-right:15px">发布日期</div>
+      <el-date-picker
+        v-model="releaseDate"
+        type="daterange"
+        align="left"
+        style="width:320px;margin-right:50px"
+        unlink-panels
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+        value-format="yyyyMMdd"
+        :picker-options="pickerOptions"
         class="filter-item"
-      >
-        <el-option
-          v-for="item in statusOptions"
-          :key="item.value"
-          :label="item.label"
-          :value="item.value"
-        />
-      </el-select>
+      />
 
       <el-button
         class="filter-item"
diff --git a/frontend/src/views/column/index.vue b/frontend/src/views/column/index.vue
index 68b4e95..c7cd431 100644
--- a/frontend/src/views/column/index.vue
+++ b/frontend/src/views/column/index.vue
@@ -288,7 +288,7 @@
             @click="saveBanner()"
           >保存
           </el-button>
-          <el-button @click="imageDialogVisible = fasle">取消</el-button>
+          <el-button @click="imageDialogVisible = false">取消</el-button>
         </div>
       </el-dialog>
       <el-dialog :visible.sync="dialogVisible">
