• 小程序意见反馈界面(简洁版代码)


    在开发个人中心页面时,意见反馈功能是必不可少的,下面介绍该功能的具体开发流程

    1、首先看一下效果图

     2、WXML代码,分为三个部分,文本域(TextArea)、输入框(Input)、按钮(Button),

    其中文本域限制了字数,50字以内。

    1. <view class="opinion_wrap">
    2. <form bindsubmit="formSubmit">
    3. <view class="content_wrap">
    4. <view class="content">
    5. <textarea name="opinion" maxlength="50" value="{{content}}" auto-height placeholder-class="placeholder" placeholder="期待您的反馈,我们将会不断改进(50字以内)" />
    6. view>
    7. view>
    8. <view class="phone">
    9. <input name="contact" value="{{contact}}" placeholder-class="placeholder" placeholder="请留下您的手机号或邮箱,方便我们及时回复" />
    10. view>
    11. <button formType="submit" hover-class="button_active" loading="{{loading}}">提交button>
    12. form>
    13. view>

    3、WXSS样式文件,主要使用了盒子阴影和圆角边框,个人比较喜欢简洁型的,看着舒服

    1. /* pages/feedback/feedback.wxss */
    2. page{
    3. background-color: white;
    4. }
    5. .content_wrap, .phone{
    6. width: 96%;
    7. background-color: #fff;
    8. border-radius: 10rpx;
    9. margin: 20rpx auto;
    10. box-shadow: 0px 0px 10px 2px rgb(0 0 0 / 8%);
    11. }
    12. .content{
    13. padding: 20rpx;
    14. margin: 0 auto;
    15. border-radius: 10rpx;
    16. }
    17. textarea{
    18. min-height: 300rpx;
    19. width: 100%;
    20. }
    21. input{
    22. margin-top: 30rpx;
    23. height: 100rpx;
    24. padding-left: 20rpx;
    25. background-color: #fff;
    26. }
    27. button{
    28. color: white;
    29. border: none;
    30. width: 85%;
    31. padding: 10rpx 0rpx;
    32. margin: 40rpx auto;
    33. background: #2b85e4;
    34. border-radius: 40rpx;
    35. font-size: 30rpx;
    36. }
    37. .button_active{
    38. background: #5cadff;
    39. }
    40. .placeholder{
    41. color: #b6b6b6;
    42. font-size: 14px;
    43. }

    4、JS文件,提交表单触发formSumbit函数,函数的主要工作就是检查文本域是否为空,还有用户填写的手机号或者邮箱的格式是否正确,如果满足以上两个条件则将反馈信息和用户名以Post方式提交到后台,由后台将反馈信息存入到数据库。

    这里面的逻辑代码需要一定的理解能力(其实也并不难),如果看不懂的,可以在评论区提问或者百度,坚持才可能胜利!

    1. Page({
    2. /**
    3. * 页面的初始数据
    4. */
    5. data: {
    6. loading: false,
    7. contact: '',
    8. contant: ''
    9. },
    10. formSubmit: function (e) {
    11. let _that = this;
    12. let content = e.detail.value.opinion;
    13. let contact = e.detail.value.contact;
    14. let regPhone = /^1[3578]\d{9}$/;
    15. let regEmail = /^[a-z\d_\-\.]+@[a-z\d_\-]+\.[a-z\d_\-]+$/i;
    16. if (content == "") {
    17. wx.showModal({
    18. title: '提示',
    19. content: '反馈内容不能为空!',
    20. })
    21. return false
    22. }
    23. if (contact == "") {
    24. wx.showModal({
    25. title: '提示',
    26. content: '手机号或者邮箱不能为空!',
    27. })
    28. return false
    29. }
    30. if(contact == "" && content == "") {
    31. wx.showModal({
    32. title: '提示',
    33. content: '反馈内容,手机号或者邮箱不能为空!',
    34. })
    35. return false
    36. }
    37. if ((!regPhone.test(contact) && !regEmail.test(contact)) || (regPhone.test(contact) && regEmail.test(contact))) { //验证手机号或者邮箱的其中一个对
    38. wx.showModal({
    39. title: '提示',
    40. content: '您输入的手机号或者邮箱有误!',
    41. })
    42. return false
    43. } else {
    44. this.setData({
    45. loading: true
    46. })
    47. var n = wx.getStorageSync("userinfo");
    48. let nickname;
    49. //当本地缓存的用户名称不为""或者null时,设置userinfo信息
    50. if(n.nickName != '' && n.nickName != null){
    51. nickname = n.nickName;
    52. }
    53. let status = false;
    54. wx.request({
    55. url: '后台api地址,需自行填写',
    56. method: 'POST',
    57. data: {
    58. "content": content,
    59. "contact": contact,
    60. "nickname":nickname
    61. },
    62. success: function (res) {
    63. if (res.data.code == 0) {
    64. wx.showToast({
    65. title: '反馈成功',
    66. icon: 'success',
    67. duration: 1000,
    68. success: function (res) {
    69. //提示框消失后返回上一级页面
    70. setTimeout(() => {
    71. wx.navigateBack({
    72. change: true,
    73. })
    74. }, 1200)
    75. }
    76. })
    77. }else{
    78. wx.showToast({
    79. title: '反馈失败,请稍后再试',
    80. icon: 'error',
    81. duration: 1200
    82. });
    83. }
    84. },
    85. fail: function () {
    86. wx.showToast({
    87. title: '请求失败~',
    88. icon: 'error',
    89. duration: 1500
    90. })
    91. }
    92. })
    93. return status;
    94. }
    95. },
    96. })

    那么这里,我也把Java相关后端代码给到大家:

    1. @PostMapping("/add")
    2. public PublicInterface add(@RequestBody Feedback feedback){
    3. PublicInterface res = new PublicInterface<>();
    4. boolean flag = feedbackService.add(feedback);
    5. if (flag){
    6. res.setMsg("反馈成功!");
    7. }else {
    8. res.setCode(1);
    9. res.setMsg("反馈失败,请稍后再试");
    10. }
    11. return res;
    12. }

    PublicInterface类

    1. import lombok.AllArgsConstructor;
    2. import lombok.Data;
    3. import lombok.NoArgsConstructor;
    4. import java.io.Serializable;
    5. import java.util.List;
    6. @Data
    7. @NoArgsConstructor
    8. @AllArgsConstructor
    9. public class PublicInterface implements Serializable {
    10. //返回消息
    11. private String msg;
    12. //代码状态
    13. private int code;
    14. //回写数据
    15. private MyData data;
    16. //数据条数
    17. private int total;
    18. }

    MyData类:

    1. import lombok.AllArgsConstructor;
    2. import lombok.Data;
    3. import lombok.NoArgsConstructor;
    4. import java.util.List;
    5. @Data
    6. @AllArgsConstructor
    7. @NoArgsConstructor
    8. public class MyData {
    9. private List list;
    10. //下一条记录的索引(获取壁纸时,接口需要)
    11. private int nextStart;
    12. }

    这是个人开发的小程序,大家可以浏览一下在线效果图,里面就有反馈意见功能

     如果对您有帮助,欢迎收藏~

  • 相关阅读:
    华为鸿蒙 adb
    包埋紫杉醇的Pluronic P85/聚乳酸(PLA-P85-PLA)纳米粒子|制备方法
    设计模式之中介者模式
    【每日一练】图解:链表内指定区间反转
    掌握了不一定能拿到大厂 Offer,但不掌握一定进不去大厂的算法
    lv3 嵌入式开发-2 linux软件包管理
    vue3动态路由警告问题
    【Linux】Linux进程间通信(二)
    Redis的分布式锁问题(八)基于Redis的分布式锁
    无需字体支持的符号大全(2)
  • 原文地址:https://blog.csdn.net/calm_programmer/article/details/127776928