• 创建个人中心页面(下)


    目录

    布局规划前端页面

    获取头像+获取Bot列表

    对接获取Bot信息+渲染到前端

    实现创建一个Bot

    前端进行对接插入Bot

    实现创建成功关闭和清空

    修改时间

    实现删除按钮

    安装依赖:vue3-ace-editor


    布局规划前端页面

    使用 bootstrap 的 grids system 进行布局

    在 bootstrap 的网址搜索 grids system。

    一行分为12份,左边3份,为头像;右边9份,白色区域 cards,加上按钮创建 bot,获取 Bot 列表

    在 views.user.bot.UserBotIndexView.vue 下修改,实现基本的个人 bot 信息展示

    获取头像+获取Bot列表

    对接获取Bot信息+渲染到前端

     

    1. <template>
    2. <div class="container">
    3. <div class="row">
    4. <div class="col-3">
    5. <div class="card" style="margin-top:20px;">
    6. <div class="card-body" >
    7. <img :src="$store.state.user.photo" alt="" style="width:100%;">
    8. </div>
    9. </div>
    10. </div>
    11. <div class="col-9">
    12. <div class="card" style="margin-top:20px;">
    13. <div class="card-header">
    14. <span style="font-size:130%">我的Robot</span>
    15. <button type="button" class="btn btn-warning float-end" style="color:white;" data-bs-toggle="modal" data-bs-target="#add-bot-btn">
    16. 创建Robot
    17. </button>
    18. <!-- 创建robot 模态框 -->
    19. </div>
    20. <div class="card-body">
    21. <table class="table table-striped table-hover">
    22. <thead>
    23. <tr>
    24. <th>Robot名称</th>
    25. <th>创建时间</th>
    26. <th>操作</th>
    27. </tr>
    28. </thead>
    29. <tbody>
    30. <tr v-for="bot in bots" :key="bot.id">
    31. <td>{{bot.title}}</td>
    32. <td>{{bot.createTime}}</td>
    33. <td>
    34. <button type="button" class="btn btn-primary" style="color:white; margin-right: 10px;" data-bs-toggle="modal" :data-bs-target="'#update-bot-modal-'+bot.id">
    35. 修改
    36. </button>
    37. <button type="button" @click="remove_bot(bot)" class="btn btn-danger" style="color:white;">
    38. 删除
    39. </button>
    40. <!-- 修改bot模态框 -->
    41. </td>
    42. </tr>
    43. </tbody>
    44. </table>
    45. </div>
    46. </div>
    47. </div>
    48. </div>
    49. </div>
    50. </template>
    51. <script>
    52. import $ from 'jquery'
    53. import { ref } from 'vue'
    54. import { useStore } from 'vuex';
    55. export default{
    56. components:{
    57. },
    58. setup(){
    59. const store = useStore();
    60. let bots = ref([]);
    61. const refresh_bots = () => {
    62. $.ajax({
    63. url: "http://127.0.0.1:3000/user/bot/getlist/",
    64. type: "get",
    65. headers: {
    66. Authorization: "Bearer " + store.state.user.token,
    67. },
    68. success(resp) {
    69. bots.value = resp;
    70. }
    71. });
    72. }
    73. refresh_bots();
    74. return{
    75. bots,
    76. }
    77. }
    78. }
    79. </script>
    80. <style scoped>
    81. </style>

    前端页面创建、修改、删除 Bot

    实现创建一个Bot

    在点击 创建Bot 按钮的时候需要一个弹窗。在 bootstrap 中寻找一个 modals :

    在 views.user.bot.UserBotIndexView.vue 下修改,增加一个模态框,然后丰富模态框的内容。

    1. <template>
    2. <div class="container">
    3. <div class="row">
    4. <div class="col-3">
    5. <div class="card" style="margin-top:20px;">
    6. <div class="card-body" >
    7. <img :src="$store.state.user.photo" alt="" style="width:100%;">
    8. </div>
    9. </div>
    10. </div>
    11. <div class="col-9">
    12. <div class="card" style="margin-top:20px;">
    13. <div class="card-header">
    14. <span style="font-size:130%">我的Robot</span>
    15. <button type="button" class="btn btn-warning float-end" style="color:white;" data-bs-toggle="modal" data-bs-target="#add-bot-btn">
    16. 创建Robot
    17. </button>
    18. <!-- 创建robot 模态框 -->
    19. <div class="modal fade" id="add-bot-btn" tabindex="-1">
    20. <div class="modal-dialog modal-xl">
    21. <div class="modal-content">
    22. <div class="modal-header">
    23. <h5 class="modal-title" id="exampleModalLabel">创建Robot</h5>
    24. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
    25. </div>
    26. <div class="modal-body">
    27. <div class="mb-3">
    28. <label for="add-bot-title" class="form-label">名称</label>
    29. <input v-model="botadd.title" type="text" class="form-control" id="add-bot-title" placeholder="请输入Robot名称">
    30. </div>
    31. <div class="mb-3">
    32. <label for="add-bot-description" class="form-label">Robot简介</label>
    33. <textarea v-model="botadd.description" class="form-control" id="add-bot-description" rows="3" placeholder="请输入Robot描述"></textarea>
    34. </div>
    35. <div class="mb-3">
    36. <label for="add-bot-code" class="form-label">Robot代码</label>
    37. <textarea v-model="botadd.content" class="form-control" id="add-bot-content" rows="3" placeholder="请输入Bot代码"></textarea>
    38. </div>
    39. </div>
    40. </div>
    41. </div>
    42. </div>
    43. <div class="modal-footer">
    44. <!-- //增加报错信息 -->
    45. <div class="error-message">{{ botadd.error_message }}</div>
    46. <button type="button" class="btn btn-primary" @click="add_bot">创建</button>
    47. <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
    48. </div>
    49. </div>
    50. <div class="card-body">
    51. <table class="table table-striped table-hover ">
    52. <thead>
    53. <tr>
    54. <th>Robot名称</th>
    55. <th>创建时间</th>
    56. <th>操作</th>
    57. </tr>
    58. </thead>
    59. <tbody>
    60. <tr v-for="bot in bots" :key="bot.id">
    61. <td>{{bot.title}}</td>
    62. <td>{{bot.createTime}}</td>
    63. <td>
    64. <button type="button" class="btn btn-primary" style="color:white; margin-right: 10px;" data-bs-toggle="modal" :data-bs-target="'#update-bot-modal-'+bot.id">
    65. 修改
    66. </button>
    67. <button type="button" @click="remove_bot(bot)" class="btn btn-danger" style="color:white;">
    68. 删除
    69. </button>
    70. <!-- 修改bot模态框 -->
    71. </td>
    72. </tr>
    73. </tbody>
    74. </table>
    75. </div>
    76. </div>
    77. </div>
    78. </div>
    79. </div>
    80. </template>
    81. <script>
    82. import $ from 'jquery'
    83. import { ref } from 'vue'
    84. import { useStore } from 'vuex';
    85. export default{
    86. components:{
    87. },
    88. setup(){
    89. const store = useStore();
    90. let bots = ref([]);
    91. const refresh_bots = () => {
    92. $.ajax({
    93. url: "http://127.0.0.1:3000/user/bot/getlist/",
    94. type: "get",
    95. headers: {
    96. Authorization: "Bearer " + store.state.user.token,
    97. },
    98. success(resp) {
    99. bots.value = resp;
    100. }
    101. });
    102. }
    103. refresh_bots();
    104. return{
    105. bots,
    106. }
    107. }
    108. }
    109. </script>
    110. <style scoped>
    111. </style>

    前端进行对接插入Bot

    增加一个 add_bot 函数:

    1. <template>
    2. <div class="container">
    3. <div class="row">
    4. <div class="col-3">
    5. <div class="card" style="margin-top:20px;">
    6. <div class="card-body" >
    7. <img :src="$store.state.user.photo" alt="" style="width:100%;">
    8. </div>
    9. </div>
    10. </div>
    11. <div class="col-9">
    12. <div class="card" style="margin-top:20px;">
    13. <div class="card-header">
    14. <span style="font-size:130%">我的Robot</span>
    15. <button type="button" class="btn btn-warning float-end" style="color:white;" data-bs-toggle="modal" data-bs-target="#add-bot-btn">
    16. 创建Robot
    17. </button>
    18. <!-- 创建robot 模态框 -->
    19. <div class="modal fade" id="add-bot-btn" tabindex="-1">
    20. <div class="modal-dialog modal-xl">
    21. <div class="modal-content">
    22. <div class="modal-header">
    23. <h5 class="modal-title" id="exampleModalLabel">创建Robot</h5>
    24. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
    25. </div>
    26. <div class="modal-body">
    27. <div class="mb-3">
    28. <label for="add-bot-title" class="form-label">名称</label>
    29. <input v-model="botadd.title" type="text" class="form-control" id="add-bot-title" placeholder="请输入Robot名称">
    30. </div>
    31. <div class="mb-3">
    32. <label for="add-bot-description" class="form-label">Robot简介</label>
    33. <textarea v-model="botadd.description" class="form-control" id="add-bot-description" rows="3" placeholder="请输入Robot描述"></textarea>
    34. </div>
    35. <div class="mb-3">
    36. <label for="add-bot-code" class="form-label">Robot代码</label>
    37. <textarea v-model="botadd.content" class="form-control" id="add-bot-content" rows="3" placeholder="请输入Bot代码"></textarea>
    38. </div>
    39. </div>
    40. </div>
    41. </div>
    42. </div>
    43. <div class="modal-footer">
    44. <!-- //增加报错信息 -->
    45. <div class="error-message">{{ botadd.error_message }}</div>
    46. <button type="button" class="btn btn-primary" @click="add_bot">创建</button>
    47. <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
    48. </div>
    49. </div>
    50. <div class="card-body">
    51. <table class="table table-striped table-hover ">
    52. <thead>
    53. <tr>
    54. <th>Robot名称</th>
    55. <th>创建时间</th>
    56. <th>操作</th>
    57. </tr>
    58. </thead>
    59. <tbody>
    60. <tr v-for="bot in bots" :key="bot.id">
    61. <td>{{bot.title}}</td>
    62. <td>{{bot.createTime}}</td>
    63. <td>
    64. <button type="button" class="btn btn-primary" style="color:white; margin-right: 10px;" data-bs-toggle="modal" :data-bs-target="'#update-bot-modal-'+bot.id">
    65. 修改
    66. </button>
    67. <button type="button" @click="remove_bot(bot)" class="btn btn-danger" style="color:white;">
    68. 删除
    69. </button>
    70. <!-- 修改bot模态框 -->
    71. </td>
    72. </tr>
    73. </tbody>
    74. </table>
    75. </div>
    76. </div>
    77. </div>
    78. </div>
    79. </div>
    80. </template>
    81. <script>
    82. import $ from 'jquery'
    83. import { ref } from 'vue'
    84. import { useStore } from 'vuex';
    85. export default{
    86. components:{
    87. },
    88. setup(){
    89. const store = useStore();
    90. let bots = ref([]);
    91. const refresh_bots = () => {
    92. $.ajax({
    93. url: "http://127.0.0.1:3000/user/bot/getlist/",
    94. type: "get",
    95. headers: {
    96. Authorization: "Bearer " + store.state.user.token,
    97. },
    98. success(resp) {
    99. bots.value = resp;
    100. }
    101. });
    102. }
    103. const botadd = reactive({
    104. title: "",
    105. description: "",
    106. content: "",
    107. error_message: "",
    108. });
    109. //创建一个 bot
    110. const add_bot = () => {
    111. botadd.error_message = "";
    112. $.ajax({
    113. url: "http://127.0.0.1:3000/user/bot/add/",
    114. type: "post",
    115. data: {
    116. title: botadd.title,
    117. description: botadd.description,
    118. content: botadd.content,
    119. },
    120. headers: {
    121. Authorization: "Bearer " + store.state.user.token,
    122. },
    123. success(resp) {
    124. if (resp.error_message === "success") {
    125. botadd.title = "";
    126. botadd.description = "";
    127. botadd.content = "";
    128. Modal.getInstance("#add-bot-btn").hide();
    129. refresh_bots();
    130. } else {
    131. botadd.error_message = resp.error_message;
    132. }
    133. }
    134. })
    135. }
    136. refresh_bots();
    137. return{
    138. bots,
    139. botadd,
    140. add_bot,
    141. }
    142. }
    143. }
    144. </script>
    145. <style scoped>
    146. </style>

     创建完成后需要绑定前端的信息。在前面的地方加上 v-model,同时增加一个 触发事件。

     

     修改时间

    如果创建 Bot 的时候时间出现问题:在后端的 pojo 里修改,加上时区:

    1. package com.kill9.backend.pojo;
    2. import com.baomidou.mybatisplus.annotation.IdType;
    3. import com.baomidou.mybatisplus.annotation.TableId;
    4. import com.fasterxml.jackson.annotation.JsonFormat;
    5. import lombok.AllArgsConstructor;
    6. import lombok.Data;
    7. import lombok.NoArgsConstructor;
    8. import java.util.Date;
    9. @Data
    10. @NoArgsConstructor
    11. @AllArgsConstructor
    12. public class Bot {
    13. @TableId(type = IdType.AUTO)
    14. private Integer id;//在pojo里最好用Integer,否则会报警告
    15. private Integer userId;//pojo里要用驼峰命名法和数据库的下划线对应
    16. private String title;
    17. private String description;
    18. private String content;
    19. private Integer rating;
    20. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ,timezone = "Asia/Shanghai")
    21. private Date createtime;
    22. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    23. private Date modifytime;
    24. }

    实现创建成功关闭和清空

    1. success(resp) {
    2. if (resp.error_message === "success") {
    3. botadd.title = "";
    4. botadd.description = "";
    5. botadd.content = "";
    6. Modal.getInstance("#add-bot-btn").hide();
    7. refresh_bots();
    8. } else {
    9. botadd.error_message = resp.error_message;
    10. }
    11. }

    实现删除按钮

     删除一个 Bot

    增加一个 删除 bot 的函数:

    1. //删除一个 bot
    2. const remove_bot = (bot) => {
    3. $.ajax({
    4. url: "http://127.0.0.1:3000/user/bot/remove/",
    5. type: "post",
    6. data: {
    7. bot_id: bot.id,
    8. },
    9. headers: {
    10. Authorization: "Bearer " + store.state.user.token,
    11. },
    12. success(resp) {
    13. console.log(resp);
    14. if (resp.error_message === "success") {
    15. refresh_bots();
    16. }
    17. }
    18. })
    19. }

    同时需要在上文绑定 删除 按钮。

    <button type="button" class="btn btn-danger" @click="remove_bot(bot)">删除</button>

     如果删除的时候提示没有权限,可能是因为后端的 RemoveServiceImpl.java 文件出错,在里面修改即可。

    修改一个 Bot

    在 views.user.bot.UserBotIndexView.vue 下修改。

    1. const update_bot = (bot) => {
    2. botadd.error_message = "";
    3. $.ajax({
    4. url: "http://127.0.0.1:8080/user/bot/update/",
    5. type: "post",
    6. data: {
    7. bot_id: bot.id,
    8. title: bot.title,
    9. description: bot.description,
    10. content: bot.content,
    11. },
    12. headers: {
    13. Authorization: "Bearer " + store.state.user.token,
    14. },
    15. success(resp) {
    16. if (resp.error_message === "success") {
    17. Modal.getInstance('#update-bot-modal-' + bot.id).hide();
    18. refresh_bots();
    19. } else {
    20. botadd.error_message = resp.error_message;
    21. }
    22. }
    23. })
    24. }

    修改每一个 bot 的时候需要有对应单独的一个模态框。

     

    1. <!-- 修改bot模态框 -->
    2. <div class="modal fade" :id="'update-bot-modal-'+bot.id" tabindex="-1">
    3. <div class="modal-dialog modal-xl">
    4. <div class="modal-content">
    5. <div class="modal-header">
    6. <h5 class="modal-title">Modify Robot</h5>
    7. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
    8. </div>
    9. <div class="modal-body">
    10. <div class="mb-3">
    11. <label for="add-bot-title" class="form-label">Title</label>
    12. <input v-model="bot.title" type="text" class="form-control" id="add-bot-title" placeholder="Input Robot Title">
    13. </div>
    14. <div class="mb-3">
    15. <label for="add-bot-description" class="form-label">Robot Description</label>
    16. <textarea v-model="bot.description" class="form-control" id="add-bot-description" rows="3" placeholder="Input Robot Description"></textarea>
    17. </div>
    18. <div class="mb-3">
    19. <label for="add-bot-code" class="form-label">Robot Code</label>
    20. <textarea v-model="bot.content" class="form-control" id="add-bot-content" rows="3" placeholder="Input Bot Code"></textarea>
    21. </div>
    22. </div>
    23. <div class="modal-footer">
    24. <div class="error-message">
    25. {{botadd.error_message}}
    26. </div>
    27. <button type="button" class="btn btn-primary" @click="update_bot(bot)">Save Changes</button>
    28. <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
    29. </div>
    30. </div>
    31. </div>
    32. </div>

     

     

     

    安装依赖:vue3-ace-editor

    在 vue 界面添加依赖 vue3-ace-editor
    添加组件

    1. import { VAceEditor } from 'vue3-ace-editor';
    2. import ace from 'ace-builds';
    3. ace.config.set(
    4. "basePath",
    5. "https://cdn.jsdelivr.net/npm/ace-builds@" + require('ace-builds').version + "/src-noconflict/")
    6. <VAceEditor
    7. v-model:value="botadd.content"
    8. @init="editorInit"
    9. lang="c_cpp"
    10. theme="textmate"
    11. style="height: 300px" />

     

     

    完成~~ 

  • 相关阅读:
    【C++】STL 标准模板库 ② ( STL 标准模板库组成 | STL 十三个头文件 | STL 六大组件 | STL 容器存放基础数据类型 | STL 容器存放类对象 | 容器存放对象指针 )
    优化用户体验:直播带货系统源码的界面设计与互动功能
    1111111111
    【JavaSe笔记】接口的定义,特性,实现,继承
    【EI会议征稿】2024年智慧城市与信息系统国际学术会议 (ICSCIS 2024)
    PyRosetta 安装方法之Conda安装
    c语言练习84:动态内存管理
    网站分析软件Umami
    UEFI-PciHostBridge
    【注释和反射】类加载的过程
  • 原文地址:https://blog.csdn.net/weixin_49884716/article/details/127855489