当前位置: 首页 > news >正文

做网站做wordpress 所以文章

做网站做,wordpress 所以文章,建设代刷网站,ios wordpress 编辑器班级事务管理系统 后端采用Spring Boot开发。 cloud分支版本正在开发中#xff0c;后端采用Spring Cloud进行改造。 系统架构 项目采用B/S架构#xff0c;前后端通讯采用RESTful API#xff0c;数据格式使用Json#xff0c;认证Token格式采用JWT。 身份认证使用Spring …班级事务管理系统 后端采用Spring Boot开发。 cloud分支版本正在开发中后端采用Spring Cloud进行改造。 系统架构 项目采用B/S架构前后端通讯采用RESTful API数据格式使用Json认证Token格式采用JWT。 身份认证使用Spring Security Oauth2。 前端Vue.js 后端Spring Cloud 数据库MySQL 缓存Redis 文件存储FastDFS ORMMyBatis-Plus 具体技术栈如下 后端使用的技术栈 Spring CloudSpring SecurityFastDFSMySqlRedisSpring CacheMyBatis-Plus… 前端使用的技术栈 Vue.jsaxiosElementUIvue-routervuextui-editor… 各个模块简要介绍 模块名描述tclass-common公共模块存放一些通用的配置和类如oauth资源服务器的配置FastDFS文件服务等tclass-configSpring Cloud配置中心统一微服务的配置管理tclass-gatewaySpring Cloud网关负责将对应请求转发到对应的微服务模块tclass-oauthSpring Cloud认证中心负责权限统一的认证提供登录接口以及发放JWT类型的Tokentclass-registrySpring Cloud注册中心负责微服务的统一治理。tclass-notice微服务通知模块负责通知内容的CRUDtclass-user微服务用户模块负责用户的CRUDtclass-work微服务作业模块负责作业文件的持久化和作业内容的CRUD 项目中使用Spring Cloud相关组件介绍 技术栈描述Spring Cloud Config微服务配置的统一管理实时更新存储的位置可以为Git仓库、SVN仓库、本地文件等Spring Cloud OAuth2Spring Cloud 体系对OAuth2协议的实现可以用来做多个微服务的统一认证 (验证身份合法性)授权(验证权限)Spring Cloud Eureka负责服务的注册于发现Eureka体系包括服务注册中心、服务提供者、服务消费者。Spring Cloud Ribbon负责服务间调用的负载均衡Spring Cloud Feign简化微服务之间相互调用只需要一个接口的注解就可以实现服务之间的HTTP调用Spring Cloud Hystrix微服务熔断器当服务不可用时防止请求服务的积压导致系统过载 部署 由于系统使用Spring Cloud架构部署时一般配合Nginx将请求转发到网关模块。部署时需修改对应注册中心和配置中心的地址。 服务启动顺序如下 tclass-configtclass-registrytclass-oauthtclass-gateway其他业务模块 表字段属性 部门属性Department 属性类型说明约束idint部门唯一标识非空主键namevarchar部门名称非空 文件扩展名属性Extension 属性类型说明约束idint扩展名唯一标识非空主键namevarchar扩展名名称非空 民族属性Nation 属性类型说明约束idint民族唯一标识非空主键namevarchar民族名称非空 政治面貌属性Politicsstatus 属性类型说明约束idint政治面貌唯一标识非空主键namevarchar政治面貌名称非空 班级职务属性Position 属性类型说明约束idint职务唯一标识非空主键namevarchar职务名称非空 权限属性Role 属性类型说明约束idint权限唯一标识非空主键namevarchar权限英文名称非空zh_namevarchar权限中文名称非空 通知属性Notice 属性类型说明约束idint扩展名唯一标识非空主键s_idint通知发起人id非空edit_s_idint通知编辑人iddeletedtinyint逻辑删除titlevarchar通知标题非空contenttext通知内容非空create_timedatetime创建时间非空update_timedatetime更新时间非空 学生用户属性Student 属性类型说明约束idint学生用户唯一标识非空主键namevarchar学生用户名称非空role_idint学生权限标识非空passwordvarchar用户密码非空gendervarchar用户性别非空nation_idint民族标识非空native_placevarchar用户籍贯非空politic_idint政治面貌标识emailvarchar用户邮箱phonevarchar用户手机addressvarchar用户家庭住址pos_idint班级职务标识create_timedatetime创建时间update_timedatetime更新时间login_timedatetime最近登录时间avatar_urlvarchar头像链接deletedtinyint逻辑删除 上传文件属性Upload 属性类型说明约束s_idint文件所有者id非空w_idint作业id非空file_typevarchar文件类型非空file_namevarchar文件名非空file_pathvarchar文件保存路径非空sizebigint文件大小非空create_timedatetime创建时间update_timedatetime更新时间 作业属性Work 属性类型说明约束idint扩展名唯一标识非空主键s_idint作业发起人id非空edit_s_idint作业编辑人iddeletedtinyint逻辑删除namevarchar作业名称非空extension_idint文件扩展名标识非空file_name_format_enumint文件名命名枚举非空last_timedatetime最晚提交时间非空create_timedatetime创建时间非空update_timedatetime更新时间非空 接口 统一响应格式: Content-Type: application/json 状态码: 400 请求参数错误 401 用户未登陆 403 用户权限不足 404 请求资源不存在 405 不支持该请求方法 500 服务器内部出错 503 服务不可用 Json格式规范: {code:业务错误码,msg:描述,data:结果集,timeStamp:时间戳 }公共接口 登录 请求方法 POST 请求路径 /oauth/login 参数说明username用户名password密码code验证码grant_typeOauth2认证类型 响应状态登录成功 {code: 200,data: {access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjQ5NDkxOTAsInVzZXJfbmFtZSI6IjE3MjQxMTE0MDAiLCJhdXRob3JpdGllcyI6WyJST0xFX2FkbWluIl0sImp0aSI6IjQ1MmQ2Y2VkLWJjZWItNDkzOC05NzIyLTk2NzAxOTkzYzIzOCIsImNsaWVudF9pZCI6IndlYmFwcCIsInNjb3BlIjpbInNlcnZlciJdfQ.CW5PB4zZfx7aAUl9I4U6M2KLZGql_AKMjh1V9U9IafY,token_type: bearer,refresh_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiIxNzI0MTExNDAwIiwic2NvcGUiOlsic2VydmVyIl0sImF0aSI6IjQ1MmQ2Y2VkLWJjZWItNDkzOC05NzIyLTk2NzAxOTkzYzIzOCIsImV4cCI6MTYyNDk0NzY5MCwiYXV0aG9yaXRpZXMiOlsiUk9MRV9hZG1pbiJdLCJqdGkiOiI4MDMxZjEyMS0xOGEwLTRjMjktYTMzZS03NzU5NzBjNDc5NTMiLCJjbGllbnRfaWQiOiJ3ZWJhcHAifQ.9VsKTXvtj9tpLROYNVMzvNnN7gCGd7lSAiCHm1xEYM0,expires_in: 1798,scope: server,jti: 452d6ced-bceb-4938-9722-96701993c238},msg: 登录成功,timeStamp: 1624947390207 }获取验证码 请求方法 GET 请求路径 /oauth/verifyCode.jpg 响应状态返回验证码文件流 普通用户接口 更新用户信息 请求方法 PUT 请求路径 /user/ 请求体 {address: 海南省海口市美兰区,departmentIdList: [9, 8],email: chenjingqq.com,gender: 女,id: 1724111401,name: 陈静,nationId: 44,nativePlace: 广东省,广州市,天河区,phone: 18795556693,politicId: 11, }响应状态请求成功 {code:200,data:true,msg:执行成功 }获取民族列表 请求方法 GET 请求路径 /user/nations 响应状态请求成功 {code: 200,data: [{id: 1,name: 汉族}, {id: 2,name: 蒙古族}, {id: 3,name: 回族}...],msg: 执行成功 }获取部门列表 请求方法 GET 请求路径 /user/departments 响应状态请求成功 {code: 200,data: [{id: 1,name: 组织部}, {id: 2,name: 实践部}, {id: 3,name: 外联部}...],msg: 执行成功 }获取政治面貌列表 请求方法 GET 请求路径 /user/political 响应状态请求成功 {code: 200,data: [{id: 1,name: 中共党员}, {id: 2,name: 中共预备党员}, {id: 3,name: 共青团员}...],msg: 执行成功 }获取班级职位列表 请求方法 GET 请求路径 /user/political 响应状态请求成功 {code: 200,data: [{id: 1,name: 班长}, {id: 2,name: 纪委}, {id: 3,name: 学习委员}...],msg: 执行成功 }获取权限列表 请求方法 GET 请求路径 /user/roles 响应状态请求成功 {code: 200,data: [{id: 1,name: ROLE_admin,zhName: 管理员}, {id: 2,name: ROLE_student,zhName: 普通用户}],msg: 执行成功 }上传用户头像 请求方法 POST 请求路径 /user/avatar 参数说明file头像文件 响应状态请求成功 {code:200,data:true,msg:执行成功 }获取用户头像 请求方法 GET 请求路径 /user/avatar/{photoPath} 参数说明photoPath头像图片路径 响应状态返回头像文件流 获取作业列表 请求方法 GET 请求路径 /work/ 参数说明current当前页数size页大小createTime作业创建时间 响应状态请求成功 {code: 200,data: {records: [{id: 3,editSId: null,editorName: null,deleted: false,name: 医保凭证,fileNameFormatEnum: 2,createTime: 2020-12-19 12:58:38,updateTime: 2020-12-19 12:58:38,lastTime: 2020-12-31 00:00:00,remarks: 请同学们将医保凭证上传到此处,extensionId: 11,extensionName: .jpeg,uploadFileCount: 0,sid: 1724111400,sname: 王涛}],total: 3,size: 6,current: 1,orders: [],optimizeCountSql: true,hitCount: false,searchCount: true,pages: 1},msg: 执行成功 }获取作业信息 请求方法 GET 请求路径 /work/{id} 参数说明id作业id 响应状态请求成功 {code: 200,data: {id: 3,editSId: null,editorName: null,deleted: false,name: 医保凭证,fileNameFormatEnum: 2,createTime: 2020-12-19 12:58:38,updateTime: 2020-12-19 12:58:38,lastTime: 2020-12-31 00:00:00,remarks: 请同学们将医保凭证上传到此处,extensionId: 11,extensionName: .jpeg,uploadFileCount: 1,sid: 1724111400,sname: 王涛},msg: 执行成功 }获取扩展名列表 请求方法 GET 请求路径 /work/extensions 响应状态请求成功 {code: 200,data: [{id: 1,name: 无}, {id: 3,name: .html}...],msg: 执行成功 }上传学生作业 请求方法 POST 请求路径 /work/{wId} 参数说明wId作业idfile上传的文件sId学生用户id 响应状态请求成功 {code:200,,data:true,msg:上传成功 }查询是否已上传作业 请求方法 GET 请求路径 /work/isUpload 参数说明wId作业idsId学生用户id 响应状态请求成功 {code: 200,data: { //若已上传返回文件信息否则返回nullfileType: application/octet-stream,fileName: 1724111400_王涛_Java作业.java,size: 1170,createTime: 2020-12-22 20:36:39,updateTime: 2020-12-22 20:36:39,sname: 王涛,sid: 1724111400,wid: 2},msg: 执行成功 }删除已上传的文件 请求方法 DELETE 请求路径 /work/deleteFile 参数说明wId作业idsId学生用户idfilename文件名 响应状态请求成功 {code:200,data:true,msg:执行成功 }获取通知列表 请求方法 GET 请求路径 /notice/ 参数说明current当前页size页大小title通知标题createTime创建时间 响应状态请求成功 {code: 200,data: {records: [{id: 3,editSId: null,editorName: null,deleted: false,name: 医保凭证,fileNameFormatEnum: 2,createTime: 2020-12-19 12:58:38,updateTime: 2020-12-19 12:58:38,lastTime: 2020-12-31 00:00:00,remarks: 请同学们将医保凭证上传到此处,extensionId: 11,extensionName: .jpeg,uploadFileCount: 1,sname: 王涛,sid: 1724111400}...],total: 2,size: 6,current: 1,orders: [],optimizeCountSql: true,hitCount: false,searchCount: true,pages: 1},msg: 执行成功 }获取通知 请求方法 GET 请求路径 /notice/{id} 参数说明id通知id 响应状态请求成功 {code: 200,data: {id: 33,editSId: 1724111400,editSName: 王涛,deleted: false,title: 关于英语四六级通知,content: # 英语四六级通知\n1. 报考资格\n 本次补报考生应满足唯一条件已参加2020年9月延考且当次英语四级CET4笔试成绩大于等于425分的考生。\n2. 报名方式及时间\n 1. 本次补报科目仅为英语六级CET6笔试其他科目不予补报。\n 2. 本次补报时间为11月9日9:00-11日17:00过时不再予以补报。\n 3. 符合补报资格的考生请自行登录报名系统http://cet-bm.neea.edu.cn完成CET6笔试补报及缴费。,createTime: 2020-12-19 12:49:30,updateTime: 2020-12-19 12:51:27,sname: 王涛,sid: 1724111400},msg: 执行成功 }获取当前最新通知 请求方法 GET 请求路径 /notice/current 响应状态请求成功 {code: 200,data: {id: 33,editSId: 1724111400,editSName: 王涛,deleted: false,title: 关于英语四六级通知,content: # 英语四六级通知\n1. 报考资格\n 本次补报考生应满足唯一条件已参加2020年9月延考且当次英语四级CET4笔试成绩大于等于425分的考生。\n2. 报名方式及时间\n 1. 本次补报科目仅为英语六级CET6笔试其他科目不予补报。\n 2. 本次补报时间为11月9日9:00-11日17:00过时不再予以补报。\n 3. 符合补报资格的考生请自行登录报名系统http://cet-bm.neea.edu.cn完成CET6笔试补报及缴费。,createTime: 2020-12-19 12:49:30,updateTime: 2020-12-19 12:51:27,sname: 王涛,sid: 1724111400},msg: 执行成功 }管理员接口 分页查询学生数据 请求方法 GET 请求路径 /user/admin/ 参数说明current当前页size页大小name学生用户名字nationId民族标识nativePlace籍贯politicId政治面貌posId班级职务gender性别 响应状态请求成功 {code: 200,data: {records: [{id: 1724111400,roleId: 1,name: 王涛,password: e10adc3949ba59abbe56e057f20f883e,gender: 男,nationId: 53,nativePlace: 广东省,广州市,天河区,politicId: 1,email: wangqq.com,phone: 15644442252,address: 陕西西安新城区,avatarUrl: /student/avatar/1724111400.jpg,posId: 1,createTime: 2020-07-23 16:32:47,updateTime: 2020-12-22 20:29:53,loginTime: 2020-12-22 20:29:53,deleted: false,role: {id: 1,name: ROLE_admin,zhName: 管理员},nation: {id: 53,name: 赫哲族},politicsstatus: {id: 1,name: 中共党员},position: {id: 1,name: 班长},departmentIdList: [4, 2, 7, 8, 9]}, {id: 1724111401,roleId: 2,name: 陈静,password: e10adc3949ba59abbe56e057f20f883e,gender: 女,nationId: 44,nativePlace: 广东省,广州市,天河区,politicId: 11,email: chenjingqq.com,phone: 18795556693,address: 海南省海口市美兰区,avatarUrl: https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png,posId: 11,createTime: 2020-07-23 16:38:45,updateTime: 2020-12-14 22:41:13,loginTime: 2020-12-14 22:11:45,deleted: false,role: {id: 2,name: ROLE_student,zhName: 普通用户},nation: {id: 44,name: 俄罗斯族},politicsstatus: {id: 11,name: 台盟盟员},position: {id: 11,name: 无},departmentIdList: [9, 8]}...],total: 42,size: 10,current: 1,orders: [],optimizeCountSql: true,hitCount: false,searchCount: true,pages: 5},msg: 执行成功 }修改用户数据 请求方法 PUT 请求路径 /user/admin/ 请求体 {id: 1724111400,name: 王涛,gender: 女,nationId: 53,politicId: 1,email: wangqq.com,phone: 15644442252,address: 陕西西安新城区,nativePlace: 广东省,广州市,天河区,posId: 1,roleId: 1,departmentIdList: [4, 2, 7, 8, 9] }响应状态请求成功 {code:200,data:true,msg:执行成功 }批量删除用户数据 请求方法 DELETE 请求路径 /user/admin/ 参数说明idList用户的id列表 响应状态请求成功 {code:200,data:true,msg:执行成功 }批量导出学生数据 请求方法 GET 请求路径 /user/admin/export 参数说明idList用户的id列表 响应状态返回excel文件流 批量导入学生数据 请求方法 POST 请求路径 /user/admin/import 参数说明file导入的excel文件 响应状态请求成功 {code:200,data:true,msg:已成功导入n条数据! }获取导入模板 请求方法 GET 请求路径 /user/admin/template 响应状态返回excel文件流 获取作业数据 请求方法 GET 请求路径 /work/admin/{id} 参数说明id作业id 响应状态请求成功 {code: 200,data: {id: 3,editSId: null,editorName: null,deleted: false,name: 医保凭证,fileNameFormatEnum: 2,createTime: 2020-12-19 12:58:38,updateTime: 2020-12-19 12:58:38,lastTime: 2020-12-31 00:00:00,remarks: 请同学们将医保凭证上传到此处,extensionId: 11,extensionName: .jpeg,uploadFileCount: 1,sname: 王涛,sid: 1724111400},msg: 执行成功 }发布作业 请求方法 POST 请求路径 /work/admin/ 请求体 {sid: 1724111400,fileNameFormatEnum: 4,//文件命名枚举extensionId: 3,//扩展名标识name: test,lastTime: 2020-12-24 00:00:00,remarks: 添加数据, }响应状态请求成功 {code:200,data:true,msg:执行成功 }更新作业数据 请求方法 PUT 请求路径 /work/admin/ 请求体 {id: 4,fileNameFormatEnum: 4,extensionId: 3,name: 修改test,lastTime: 2020-12-24 00:00:00,remarks: 添加数据,editSId: 1724111400 }响应状态请求成功 {code:200,data:true,msg:执行成功 }批量删除作业数据 请求方法 DELETE 请求路径 /work/admin/ 参数说明idList作业的id列表 响应状态请求成功 {code:200,data:true,msg:执行成功 }下载作业文件 请求方法 GET 请求路径 /work/admin/download 参数说明wId作业idfileName文件名 响应状态返回请求对应的文件流 打包下载作业文件 请求方法 GET 请求路径 /work/admin/download/{wId} 参数说明wId作业idfileName文件名 响应状态返回打包zip文件流 分页获取上传文件信息列表 请求方法 GET 请求路径 /work/admin/upload/{wId} 参数说明wId作业idcurrent当前页size页大小 响应状态请求成功 {code: 200,data: {records: [{fileType: image/jpeg,fileName: 1724111400_王涛_医保凭证.jpeg,size: 5430113,createTime: 2020-12-20 16:23:32,updateTime: 2020-12-20 16:23:32,sname: 王涛,sid: 1724111400,wid: 3}...],total: 1,size: 12,current: 1,orders: [],optimizeCountSql: true,hitCount: false,searchCount: true,pages: 1},msg: 执行成功 }批量删除已提交的作业文件 请求方法 DELETE 请求路径 /work/admin/upload 参数说明wId作业iddeleteSIdList需要删除文件对应的用户id列表deleteFileNameList需要删除的文件名列表 响应状态请求成功 {code:200,data:true,msg:删除成功 }添加文件扩展名 请求方法 POST 请求路径 /work/admin/extensions 参数说明name扩展名 响应状态请求成功 {code:200,data:true,msg:执行成功 }删除文件扩展名 请求方法 DELETE 请求路径 /work/admin/extensions 参数说明eId扩展名id 响应状态请求成功 {code:200,data:true,msg:执行成功 }发布通知 请求方法 POST 请求路径 /notice/admin/ 参数说明sId发布者idtitle通知标题content通知内容 响应状态请求成功 {code:200,data:true,msg:执行成功 }编辑通知 请求方法 PUT 请求路径 /notice/admin/ 参数说明id通知ideditSId编辑者的用户idsId发布者的用户idtitle通知标题content通知内容 响应状态请求成功 {code:200,data:true,msg:执行成功 }批量删除通知 请求方法 DELETE 请求路径 /notice/admin/ 参数说明idList通知的id列表 响应状态请求成功 {code:200,data:true,msg:执行成功 }项目效果图 登录界面 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P3ii2nNW-1691279976612)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/login.jpg)] 项目首页 管理员导航栏 普通用户导航栏 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-42HBjEja-1691279976613)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/menu_user.jpg)] 用户管理 用户数据导入导出 用户批量管理 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YIKnNQnk-1691279976613)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/data_batch.jpg)] 用户高级搜索 编辑个人资料 编辑用户资料 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9tDguO8L-1691279976614)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/user_edit.jpg)] 查看作业 查看提交的文件 提交作业 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qktMJWi4-1691279976615)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/work_upload.jpg)] 作业管理 发布作业 编辑作业 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J9jzTQmj-1691279976615)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/work_edit.jpg)] 编辑扩展名列表 查看用户提交的作业文件 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V1m22kve-1691279976616)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/work_uoload.jpg)] 查看通知 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hJbQcuyq-1691279976616)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/notice_index.jpg)] 查看通知详情 通知管理 编辑通知 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iVK0NIjj-1691279976617)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/notice_edit.jpg)] 发布通知
http://www.sadfv.cn/news/21297/

相关文章:

  • 网站域名变更怎么查网页制作考试素材
  • 扫码员在哪个网站可以做文网文许可证
  • 查询网站空间商社团网站建设
  • 建设网站的收费免费的免抠图素材网站
  • 做3d图的网站有哪些软件西部数码上传网站
  • 互联网建站公司有哪些国内app开发商
  • 哪个网站的理财频道做的比较好成都网站设计报价
  • 网站空间源码一个新网站要怎么做seo
  • 网站服务公司网站友情链接有什么用
  • 网站建设方案免费下载在哪个网站做民营企业申报
  • 微网站怎么注册中外网站建设区别
  • 大东吴建设新材料公司网站开源网站建设是什么工作
  • 原墨网站建设网站开发投标文件服务承诺部分
  • 营销型网站跟云网站wordpress获取手机号
  • 网站开发项目组织架构wordpress需要多大数据库
  • 宜昌优化网站建设php成品网站源码
  • 贵阳网站建设钟鼎网络网站平台建设需要哪些人员
  • 怎样优古网络公司网站后台济南seo整站外包
  • 个人网站租用服务器wordpress数组遍历
  • 网页和网站的概念广告优化师前景怎样
  • 模板网站多少钱win7用iis搭建网站
  • 怎样临沂网站建设wordpress 免费 模板下载地址
  • 石泉县城乡建设局网站定制型网站 成功案例
  • 做效果图的素材网站住房各城乡建设网站
  • 义乌网站制作深圳市宣传片制作公司
  • 商丘市网站建设洛阳哪有做公司网站的
  • 网站未来发展规划网站建设零基础教材免费下载
  • 为什么我的网站百度不收录网站开发常见问题
  • 衡阳网站搜索引擎优化唯品会专门做特卖的网站
  • 文明网站建设管理培训心得制作视频的软件app免费下载