[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-public-59bDkSFf":3,"public-project-articles-59bDkSFf":17},{"id":4,"uuid":5,"project_id":6,"title":7,"content":8,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},1284,"59bDkSFf",49,"17. Springboot3+Vue3实现提交审核业务功能","## 什么叫提交审核业务场景？\n1. 请假申请审核：学生提交请假信息，管理员（教师）进行审核。\n2. 博客论坛、发布心得等等：用户发布帖子（或者其他信息），管理员进行审核。\n3. 作业模块：学生提交作业，教师审核（打分）\n4. 房屋租赁系统：房东发布一个房源，管理员进行审核。\n5. 商家入驻、心理咨询师入驻、教师入驻等等：商家或者其他提交入驻信息，管理员审核。\n6. 发布商品：商家发布商品，管理员审核。\n\n……\n\n**\u003Cfont style=\"color:#DF2A3F;\">场景特征\u003C\u002Ffont>****：首先得有个功能模块，需要某个角色来提交数据（新增数据），需要另一个角色去进行“审核”的操作（审核只是广义的上，并不是说一定叫审核，它根据具体业务叫法可以不一样）**\n\n**提交者只能看到自己相关的数据（这不是必须的，根据业务来）**\n\n## 以请假为例核心代码\n```sql\nCREATE TABLE `apply` (\n  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',\n  `user_id` int DEFAULT NULL COMMENT '用户ID',\n  `title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请假标题',\n  `content` text COLLATE utf8mb4_unicode_ci COMMENT '请假说明',\n  `time` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提交时间',\n  `status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核状态',\n  `reason` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核说明',\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='请假信息表';\n```\n\n```java\npublic void add(Apply apply) {\n    Account currentUser = TokenUtils.getCurrentUser();\n    apply.setUserId(currentUser.getId());\n    apply.setTime(DateUtil.now());\n    apply.setStatus(\"待审核\");\n    applyMapper.insert(apply);\n}\n```\n\n```html\n\u003Cel-table :data=\"data.tableData\" style=\"width: 100%\" :header-cell-style=\"{ color: '#333', backgroundColor: '#eaf4ff' }\">\n  \u003Cel-table-column prop=\"title\" label=\"请假标题\" \u002F>\n  \u003Cel-table-column prop=\"content\" label=\"请假说明\" \u002F>\n  \u003Cel-table-column prop=\"userName\" label=\"请假人\" \u002F>\n  \u003Cel-table-column prop=\"time\" label=\"提交时间\" \u002F>\n  \u003Cel-table-column prop=\"status\" label=\"审核状态\">\n    \u003Ctemplate v-slot=\"scope\">\n      \u003Cel-tag type=\"warning\" v-if=\"scope.row.status === '待审核'\">{{ scope.row.status }}\u003C\u002Fel-tag>\n      \u003Cel-tag type=\"success\" v-if=\"scope.row.status === '审核通过'\">{{ scope.row.status }}\u003C\u002Fel-tag>\n      \u003Cel-tag type=\"danger\" v-if=\"scope.row.status === '审核拒绝'\">{{ scope.row.status }}\u003C\u002Fel-tag>\n    \u003C\u002Ftemplate>\n  \u003C\u002Fel-table-column>\n  \u003Cel-table-column prop=\"reason\" label=\"审核说明\" \u002F>\n  \u003Cel-table-column label=\"操作\" width=\"100\">\n    \u003Ctemplate #default=\"scope\" v-if=\"data.user.role === 'USER'\">\n      \u003Cel-button :disabled=\"scope.row.status !== '待审核'\" type=\"primary\" icon=\"Edit\" circle @click=\"handleEdit(scope.row)\">\u003C\u002Fel-button>\n      \u003Cel-button :disabled=\"scope.row.status !== '待审核'\" type=\"danger\" icon=\"Delete\" circle @click=\"del(scope.row.id)\">\u003C\u002Fel-button>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #default=\"scope\" v-if=\"data.user.role === 'ADMIN'\">\n      \u003Cel-button :disabled=\"scope.row.status !== '待审核'\" type=\"primary\" @click=\"handleEdit(scope.row)\">审核\u003C\u002Fel-button>\n    \u003C\u002Ftemplate>\n  \u003C\u002Fel-table-column>\n\u003C\u002Fel-table>\n```\n\n```html\n\u003Cel-form ref=\"formRef\" :model=\"data.form\" :rules=\"data.rules\" label-width=\"80px\" style=\"padding: 20px 30px 10px 0\">\n  \u003Cel-form-item prop=\"title\" label=\"请假标题\" v-if=\"data.user.role === 'USER'\">\n    \u003Cel-input v-model=\"data.form.title\" autocomplete=\"off\" placeholder=\"请输入请假标题\" \u002F>\n  \u003C\u002Fel-form-item>\n  \u003Cel-form-item prop=\"content\" label=\"请假说明\" v-if=\"data.user.role === 'USER'\">\n    \u003Cel-input type=\"textarea\" :rows=\"3\" v-model=\"data.form.content\" autocomplete=\"off\" placeholder=\"请输入请假说明\" \u002F>\n  \u003C\u002Fel-form-item>\n  \u003Cel-form-item prop=\"status\" label=\"审核状态\" v-if=\"data.user.role === 'ADMIN'\">\n    \u003Cel-radio-group v-model=\"data.form.status\">\n      \u003Cel-radio-button label=\"待审核\" value=\"待审核\" \u002F>\n      \u003Cel-radio-button label=\"审核通过\" value=\"审核通过\" \u002F>\n      \u003Cel-radio-button label=\"审核拒绝\" value=\"审核拒绝\" \u002F>\n    \u003C\u002Fel-radio-group>\n  \u003C\u002Fel-form-item>\n  \u003Cel-form-item prop=\"reason\" label=\"审核说明\" v-if=\"data.user.role === 'ADMIN' && data.form.status === '审核拒绝'\">\n    \u003Cel-input v-model=\"data.form.reason\" autocomplete=\"off\" placeholder=\"请输入拒绝说明\" \u002F>\n  \u003C\u002Fel-form-item>\n\u003C\u002Fel-form>\n```\n\n## 核心总结\n1. 提交审核业务必要要有 **角色_id** 和 **status** 这两个字段。\n2. 在提交的接口里面需要绑定好 角色_id 以及初始化 状态（待审核）\n3. 提交的角色用户只能看到自己的 \n4. 管理员审核的时候，他需要去**更新这个状态**\n5. 提交角色的操作按钮和审核角色的操作按钮可以通过状态字段进行控制\n\n\n\n\n\n\n\n","coding",1,3793,1531,"2025-03-04 11:58:16","2026-05-03 22:49:02","带小白做毕设2025系列课程","graduation-project-2025",{"project":18,"items":19},{"id":6,"title":15,"slug":16},[20,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,141,148,155],{"id":21,"uuid":22,"project_id":6,"title":23,"type":9,"status":10,"public_enabled":10,"views":24,"sort":25,"created_at":26,"updated_at":27,"project_title":15,"project_slug":16},766,"XmlcAcY0","00. 带小白做毕设2025课程介绍",19012,1512,"2025-02-22 15:29:01","2026-05-07 15:33:28.189425+00",{"id":29,"uuid":30,"project_id":6,"title":31,"type":9,"status":10,"public_enabled":10,"views":32,"sort":33,"created_at":34,"updated_at":14,"project_title":15,"project_slug":16},767,"nmjXCdVH","01. 前端Vue3 框架的快速搭建以及项目工程的讲解",15797,1513,"2025-02-13 17:13:40",{"id":36,"uuid":37,"project_id":6,"title":38,"type":9,"status":10,"public_enabled":10,"views":39,"sort":40,"created_at":41,"updated_at":14,"project_title":15,"project_slug":16},768,"pMdPrVeH","02. 使用Vue3集成Element-Plus快速搭建一个管理系统的页面框架",15959,1514,"2025-02-14 11:25:07",{"id":43,"uuid":44,"project_id":6,"title":45,"type":9,"status":10,"public_enabled":10,"views":46,"sort":47,"created_at":48,"updated_at":14,"project_title":15,"project_slug":16},771,"8PikYMQU","03. Springboot3框架的快速搭建以及项目工程的讲解",12768,1517,"2025-02-21 17:21:51",{"id":50,"uuid":51,"project_id":6,"title":52,"type":9,"status":10,"public_enabled":10,"views":53,"sort":54,"created_at":55,"updated_at":14,"project_title":15,"project_slug":16},772,"Q1TCG9Jj","04. Springboot3整合MyBatis实现数据库操作",11144,1518,"2025-03-07 15:50:30",{"id":57,"uuid":58,"project_id":6,"title":59,"type":9,"status":10,"public_enabled":10,"views":60,"sort":61,"created_at":62,"updated_at":14,"project_title":15,"project_slug":16},773,"De7YPnEc","05. Springboot3+vue3实现增删改查、分页查询、批量删除（上）",10827,1519,"2025-02-22 15:09:19",{"id":64,"uuid":65,"project_id":6,"title":66,"type":9,"status":10,"public_enabled":10,"views":67,"sort":68,"created_at":69,"updated_at":14,"project_title":15,"project_slug":16},774,"YKEHfsPd","06. Springboot3+vue3实现增删改查、分页查询、批量删除（下）",7760,1520,"2025-02-22 22:00:02",{"id":71,"uuid":72,"project_id":6,"title":73,"type":9,"status":10,"public_enabled":10,"views":74,"sort":75,"created_at":76,"updated_at":14,"project_title":15,"project_slug":16},775,"sNDKpWVJ","07. Springboot3+Vue3实现excel批量导入导出",6552,1521,"2025-02-23 10:49:24",{"id":78,"uuid":79,"project_id":6,"title":80,"type":9,"status":10,"public_enabled":10,"views":81,"sort":82,"created_at":83,"updated_at":14,"project_title":15,"project_slug":16},776,"1uMP9O6C","08. Springboot3+vue3实现登录注册功能",7964,1522,"2025-02-23 18:14:13",{"id":85,"uuid":86,"project_id":6,"title":87,"type":9,"status":10,"public_enabled":10,"views":88,"sort":89,"created_at":90,"updated_at":14,"project_title":15,"project_slug":16},777,"WahvQp1v","09. Springboot3+vue3实现JWT登录鉴权",7151,1523,"2025-02-23 21:58:00",{"id":92,"uuid":93,"project_id":6,"title":94,"type":9,"status":10,"public_enabled":10,"views":95,"sort":96,"created_at":97,"updated_at":14,"project_title":15,"project_slug":16},778,"QFFAqZh1","10. Springboot3+vue3实现文件上传和下载",6171,1524,"2025-02-24 14:16:27",{"id":99,"uuid":100,"project_id":6,"title":101,"type":9,"status":10,"public_enabled":10,"views":102,"sort":103,"created_at":104,"updated_at":14,"project_title":15,"project_slug":16},1278,"S2eL2g5L","11. Springboot3+vue3实现个人中心、修改密码",5945,1525,"2025-02-24 18:10:59",{"id":106,"uuid":107,"project_id":6,"title":108,"type":9,"status":10,"public_enabled":10,"views":109,"sort":110,"created_at":111,"updated_at":14,"project_title":15,"project_slug":16},1279,"LkN8Mmsn","12. Springboot3+Vue3实现系统公告功能",4967,1526,"2025-02-25 11:50:13",{"id":113,"uuid":114,"project_id":6,"title":115,"type":9,"status":10,"public_enabled":10,"views":116,"sort":117,"created_at":118,"updated_at":14,"project_title":15,"project_slug":16},1280,"i7wziuEN","13. Springboot3+Vue3实现角色权限控制",4446,1527,"2025-02-25 11:51:38",{"id":120,"uuid":121,"project_id":6,"title":122,"type":9,"status":10,"public_enabled":10,"views":123,"sort":124,"created_at":125,"updated_at":14,"project_title":15,"project_slug":16},1281,"pGwiTCRn","14. Springboot3+Vue3实现富文本编辑器功能",4578,1528,"2025-02-26 16:04:58",{"id":127,"uuid":128,"project_id":6,"title":129,"type":9,"status":10,"public_enabled":10,"views":130,"sort":131,"created_at":132,"updated_at":14,"project_title":15,"project_slug":16},1282,"tZ8iDql5","15. Springboot3+Vue3实现模块之间的关联",4454,1529,"2025-02-26 18:28:55",{"id":134,"uuid":135,"project_id":6,"title":136,"type":9,"status":10,"public_enabled":10,"views":137,"sort":138,"created_at":139,"updated_at":14,"project_title":15,"project_slug":16},1283,"gb01JPC2","16. Springboot3+Vue3实现echarts数据统计",4307,1530,"2025-03-03 16:58:21",{"id":4,"uuid":5,"project_id":6,"title":7,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},{"id":142,"uuid":143,"project_id":6,"title":144,"type":9,"status":10,"public_enabled":10,"views":145,"sort":146,"created_at":147,"updated_at":14,"project_title":15,"project_slug":16},1285,"gApyb58X","18. Springboot3+Vue3实现预约审核业务功能",3332,1532,"2025-03-05 20:07:24",{"id":149,"uuid":150,"project_id":6,"title":151,"type":9,"status":10,"public_enabled":10,"views":152,"sort":153,"created_at":154,"updated_at":14,"project_title":15,"project_slug":16},1286,"XfpY5re0","19. Springboot3+Vue3实现前台首页的设计",3508,1533,"2025-03-05 20:08:12",{"id":156,"uuid":157,"project_id":6,"title":158,"type":9,"status":10,"public_enabled":10,"views":159,"sort":160,"created_at":161,"updated_at":14,"project_title":15,"project_slug":16},1287,"BnSPRBOc","20. Springboot3+Vue3实现前台轮播图和详情页的设计",4062,1534,"2025-03-17 17:13:36"]