一、数据库层面
1、document表
这个表是用来存储文件信息的。具体字段含义如下:
1. id:文件的唯一标识,整型,自增。
2. name:文件名称,字符串类型,最大长度为255个字符。
3. type:文件类型,字符串类型,最大长度为255个字符。
4. size:文件大小,单位为KB,长整型。
5. preview:预览链接,字符串类型,最大长度为255个字符。
6. url:文件链接,字符串类型,最大长度为255个字符。
7. remove:是否删除,布尔类型,0表示未删除,1表示已删除。
8. enable:是否可用,布尔类型,0表示不可用,1表示可用。
9. md5:文件的MD5值,字符串类型,最大长度为255个字符。
2、info表
info表主要存储身份信息,包括住址、户籍、联系方式等。同时也具备存储案件总结分子端存储的能力。
3、manage表
manage表用于存储全网用户的案件询问记录与案件总结。数据的生成来自客户端用户的主动触发,当客户端下载案件记录时,回主动推送一份存储到此数据库。
4、menu表
这个表主要是存储所有的前端系统菜单信息,通过这个表可以轻松的扩展功能对应的菜单,主需要前端加个对应的VUE文件就能扩展功能页面。这个表还存储了一二级菜单的包含关系。
5、role表
存储所有的角色信息。包括每个角色所有用的菜单信息。这个表就决定对应角色的用户能在前端看到哪些页面。
6、用户表
全网用户信息存储,这里面最重要的是用户姓名的唯一性与用户对应的角色信息,决定用户所拥有的权限,同时用户信息包括用户头像信息也都存储在这个表里。
7、voice表
voice表用来存储全网所有用户与大模型案件询问的对话记录,按照用户的name可以区分哪个用户的案件记录。
二、后端层面
1、pojo包
pojo包下存放的都是和数据库字段一一对应的实体类。这里为了携带分页属性我们增加了实现了自定义接口PageService。这个接口可以让所有实现他的类实现分页的逻辑,解决了mybatis-plus自带插件的分页bug。同时定义了数据库不存在的字段用于分页数据删除,批量数据携带等。其他类都是类似功能,不再赘述。
2、mapper包
以UserMapper为例:
这个类是一个Java接口,名为UserMapper,它继承了BaseMapper接口。BaseMapper是MyBatis-Plus框架提供的一个通用的Mapper接口,包含了许多基础的数据库操作方法,如插入、更新、删除等。通过继承BaseMapper,UserMapper接口可以直接使用这些基础方法,而无需自己实现。
在这个接口中,定义了以下几个方法:
Integer list_total(@Param("user") User user):查询满足条件的用户总数。
List<User> list_page(@Param("user") User user):分页查询满足条件的用户列表。
void list_insert(@Param("userList") List<User> userList):批量插入用户数据。
User selectUserByNamePassword(@Param("user") User user):根据账号和密码查询用户是否存在。
User selectUserByName(@Param("user") User user):仅根据账号查询用户。
这些方法的具体实现需要在实现类中完成,通常是通过XML文件或者注解的方式来实现。
其他mapper类和此类似。
3、controller包
以UserControoler为例:
这个类是一个名为UserController的Java控制器类,用于处理与用户相关的HTTP请求。它使用了Spring框架的注解来定义RESTful API接口,并使用Hutool工具库来处理Excel文件的导入和导出。
该类具有以下功能:
1. 插入或更新用户信息:通过`insertOrUpdate`方法,可以向数据库中插入新用户或更新现有用户的信息。如果用户ID存在,则执行更新操作;否则,执行插入操作。
2. 删除用户:通过`delete`方法,可以根据用户对象删除指定的用户。
3. 查询用户:通过`select`方法,可以根据用户名查询用户信息。
4. 分页查询用户列表:通过`list_page`方法,可以根据给定的用户对象进行分页查询,返回包含总记录数和当前页数据的哈希映射。
5. 批量删除用户:通过`list_delete`方法,可以根据提供的用户ID列表批量删除用户。
6. 导出用户列表到Excel文件:通过`list_export`方法,可以将用户列表导出为Excel文件,并设置响应头以供下载。
7. 从Excel文件导入用户列表:通过`list_import`方法,可以从上传的Excel文件中读取用户数据,并将其插入到数据库中。
该类使用了`@RestController`注解,表示它是一个RESTful控制器,可以处理HTTP请求并返回JSON格式的数据。它还使用了`@RequestMapping("/user")`注解来指定该控制器处理的URL路径为"/user"。这个就是和前端ajax请求交互的基础。
此外,该类还注入了`UserMapper`对象,用于与数据库进行交互,以及一些自定义的工具类和方法,如`MyUtils`、`Res`等。
其他控制类以此类推。
4、service包
这个类是一个分页服务接口,用于处理分页相关的操作。它包含了以下几个方法:
1. `getCurrentPage()`:获取当前页码。
2. `setCurrentPage(Integer integer)`:设置当前页码。
3. `getPageSize()`:获取每页显示的条数。
4. `setStart(Integer integer)`:设置起始位置。
5. `setEnd(Integer integer)`:设置结束位置。
在`selectByPageManage`方法中,根据总记录数和每页显示的条数计算出总页数,然后根据当前页码设置起始位置和结束位置。如果没有传递分页信息,则默认为第一页。
PageService代替所有实现接口的类实现了相关的运算逻辑,也体现了面向接口编程的思想。
5、config包
【1】Cross类
这个类是一个配置类,用于处理跨域请求。它使用了Spring框架的注解@Configuration来标识这是一个配置类。 在这个类中,定义了一个buildCorsFilter()方法,该方法返回一个CorsFilter对象。CorsFilter是Spring框架提供的一个过滤器,用于处理跨域请求。 在buildCorsFilter()方法中,首先创建了一个CorsConfiguration对象,并设置了允许的访问源地址、请求头和请求方法。然后,通过UrlBasedCorsConfigurationSource对象将该配置应用到所有的接口上。 最后,通过new CorsFilter(urlBasedCorsConfigurationSource)创建一个CorsFilter对象,并将其作为Bean注册到Spring容器中。这样,当有跨域请求时,就会使用这个配置进行处理。
【2】JWTInterceptor类
这个类是一个JWT拦截器,用于处理HTTP请求中的JWT(JSON Web Token)认证。它实现了`HandlerInterceptor`接口,并重写了`preHandle()`方法来执行认证逻辑。
在`preHandle()`方法中,首先从HTTP请求头中获取token值。如果请求的不是方法(即不是Controller中的方法),则直接通过认证。
如果token为空,则抛出一个自定义的异常,表示没有token,需要重新登录。
接下来,使用JWT库对token进行解码,获取其中的载荷信息,包括用户ID。然后根据用户ID查询数据库中的用户信息。
如果用户不存在,则抛出一个自定义的异常,表示用户不存在,需要重新登录。
最后,使用HMAC256算法和用户的密码对token进行验证。如果验证失败,则抛出一个运行时异常,表示token验证失败。
此外,该类还提供了一个静态方法`getNowUser()`,用于获取当前用户的信息。该方法通过获取HTTP请求中的token,解析出用户ID,并根据ID查询数据库中的用户信息。如果成功获取到用户信息,则返回该用户对象;否则返回null。
【3】MybatisPlus类
这个类是一个MyBatis Plus的配置类,用于配置分页插件和Mapper扫描路径。
在`@Configuration`注解下,表示这是一个配置类。
`@MapperScan("com.black.mapper")`注解指定了Mapper接口的扫描路径,即MyBatis Plus会自动扫描该路径下的Mapper接口并生成对应的代理对象。
`buildMybatisPlusInterceptor()`方法创建了一个`MybatisPlusInterceptor`对象,并通过`addInnerInterceptor()`方法添加了一个`PaginationInnerInterceptor`对象,用于实现分页功能。`DbType.MYSQL`参数指定了数据库类型为MySQL。
最后,通过`@Bean`注解将`MybatisPlusInterceptor`对象注册到Spring容器中,使其可以在其他地方被注入使用。
【4】Swagger类
这个类是一个Swagger配置类,用于生成和配置Swagger文档。
在@Configuration注解下,表示这是一个配置类。
@EnableSwagger2注解启用了Swagger 2.0的支持。
swaggerIp属性通过@Value("${swaggerIp}")注解从配置文件中获取,用于设置Swagger文档的IP地址。
restAPI()方法创建了一个Docket对象,并设置了相关的配置信息:
DocumentationType.SWAGGER_2指定了使用Swagger 2.0版本。
groupName("HIT的接口")设置了分组名称为"HIT的接口"。
apiInfo(APIInfo())调用了APIInfo()方法来构建API信息。
useDefaultResponseMessages(true)启用了默认响应消息的使用。
forCodeGeneration(false)禁用了代码生成功能。
select()方法返回一个选择器对象,用于选择要生成文档的API接口。
apis(RequestHandlerSelectors.basePackage("com.black.controller"))指定了扫描的包路径为"com.black.controller",即只扫描该包下的Controller类。
paths(PathSelectors.any())表示选择所有的路径。
build()方法构建并返回Docket对象。
APIInfo()方法创建了一个ApiInfoBuilder对象,并设置了相关的API信息:
title("RESTful")设置了API文档的标题为"RESTful"。
description(swaggerIp)设置了API文档的描述为swaggerIp的值。
termsOfServiceUrl(swaggerIp)设置了API文档的服务条款URL为swaggerIp的值。
contact(new Contact("HIT", swaggerIp, "wdfgdzx@163.com"))设置了API文档的联系人信息。
version("V1.0")设置了API文档的版本号为"V1.0"。
build()方法构建并返回ApiInfo对象。
最后,通过@Bean注解将Docket对象注册到Spring容器中,使其可以在其他地方被注入使用。
【5】WebMvc类
这个类是一个Spring MVC的配置类,用于配置拦截器和拦截规则。它实现了`WebMvcConfigurer`接口,并重写了`addInterceptors`方法来添加自定义的拦截器。
在`addInterceptors`方法中,通过调用`jwtInterceptor()`方法获取一个`JWTInterceptor`对象,并将其添加到拦截器注册表中。该拦截器会拦截所有请求路径("/**"),但排除了一些特定的路径,如登录、注册、文档导出等。这些排除的路径是不需要验证token的,可以直接访问。
另外,该类还定义了一个`jwtInterceptor()`方法,使用`@Bean`注解将其声明为一个Bean,以便在其他地方注入和使用。这个方法返回一个新的`JWTInterceptor`实例。
总之,这个类的作用是配置一个自定义的拦截器,用于验证请求中的token是否合法,并根据需要决定是否需要用户登录。
6、util包
【1】Constants类
这个类是一个常量类,用于存储一些常量值。在这个类中,定义了一些字符串常量,分别表示不同的状态码和类型。这些常量可以在其他地方引用,方便统一管理和修改。例如,CODE_200表示成功的状态码,DICT_TYPE_ICON表示图标类型的常量等。
【2】MyException
这个类是一个异常处理类,用于处理ServiceException类型的异常。它使用了Spring框架的@ControllerAdvice注解,表示这是一个全局异常处理类。在类中定义了一个handle方法,使用@ExceptionHandler注解指定了要处理的异常类型为ServiceException。当程序中抛出ServiceException异常时,这个方法会被自动调用,并将异常信息封装成一个Res对象返回给前端。其中,Res是一个自定义的响应类,包含了状态码和错误信息等字段。
【3】MyUtil
这个类是一个工具类,用于发起HTTP请求。其中定义了一个doPostJson方法,用于发起POST请求并发送JSON数据。该方法接收三个参数:url表示请求的URL地址,urlParams表示请求的参数,json表示要发送的JSON数据。在方法内部,使用Apache HttpClient库来创建和执行HTTP请求,并将响应结果转换为字符串返回。需要注意的是,该方法使用了try-catch语句来处理异常,并在finally块中关闭了HttpResponse和HttpClient对象,以避免资源泄漏。
【4】MyUtils
这个类是一个工具类,包含了多个静态方法。其中:
1. selectByPageManage方法用于分页处理逻辑,传入总数、当前页和每页条目数,计算出开始查询位置和结束查询位置,并将这些信息设置到PageService对象中。
2. getFinalPath方法用于获取不同平台的读取路径,根据操作系统类型返回不同的路径。
3. getSHA256StrJava方法用于对字符串进行SHA256加密,将加密后的结果转换为十六进制字符串并返回。
4. byte2Hex方法是一个辅助方法,用于将字节数组转换为十六进制字符串。
5. getStrNum方法用于从字符串中提取数字信息,使用正则表达式匹配非数字字符并将其替换为空字符串,最后返回提取出的数字字符串。
【5】Res
这个类是一个返回结果包装类,用于统一处理API接口的返回结果。它使用了Lombok注解来简化代码,包括@Data、@NoArgsConstructor和@AllArgsConstructor。其中:
- @Data注解会自动生成getter和setter方法以及equals()、hashCode()和toString()方法。
- @NoArgsConstructor注解会生成一个无参构造函数。
- @AllArgsConstructor注解会生成一个包含所有成员变量的构造函数。
该类有三个成员变量:code表示状态码,message表示提示信息,object表示返回的数据对象。
该类提供了四个静态方法来创建Res对象:
1. success():创建一个成功的Res对象,状态码为200,提示信息为空,数据对象为null。
2. success(Object object):创建一个成功的Res对象,状态码为200,提示信息为空,数据对象为传入的对象。
3. error():创建一个失败的Res对象,状态码为500,提示信息为"系统错误",数据对象为null。
4. error(String code, String message):创建一个失败的Res对象,状态码为传入的状态码,提示信息为传入的提示信息,数据对象为null。
【6】 ServiceException
这个类是一个自定义异常类,继承自RuntimeException。它的作用是在程序中抛出一个带有错误码和错误信息的异常,以便在处理异常时能够更好地了解错误的原因和性质。
该类使用了Lombok注解@Getter来自动生成getter方法,以便在外部获取异常的错误码。
该类有一个构造函数,接收两个参数:code表示错误码,message表示错误信息。在构造函数中,通过super(message)调用父类的构造函数,将错误信息传递给父类,同时将错误码赋值给当前类的code成员变量。
【7】Token
这个类是一个用于生成JWT(JSON Web Token)的工具类。它使用了Hutool和Auth0的JWT库来生成和签名JWT。
该类有一个静态方法productToken,接收一个User对象作为参数,并返回一个字符串类型的JWT。
在该方法中,首先使用JWT.create()创建一个空的JWT对象。然后使用withAudience()方法将user.id作为载荷添加到JWT中。接着使用withExpiresAt()方法设置JWT的过期时间为当前时间加上8小时。最后使用sign()方法对JWT进行签名,签名算法为HMAC256,密钥为user.password。最终返回生成的JWT字符串。
7、application.properties
这个是一个配置文件,用于配置Java应用程序的数据库连接、MyBatis映射器位置、MyBatis Plus日志实现、文件上传限制等参数。
其中:
- host和swaggerIp、blackIp是服务器IP地址和端口号的配置;
- spring.datasource.driver-class-name是MySQL驱动程序的类名;
- spring.datasource.url是MySQL数据库的URL,包括主机名、端口号、数据库名称、时区等信息;
- spring.datasource.username和spring.datasource.password是MySQL数据库的用户名和密码;
- spring.datasource.hikari是HikariCP连接池的配置,包括连接超时时间、验证超时时间、空闲超时时间、登录超时时间、最大生命周期、最大连接池大小、最小空闲连接数、是否只读等参数;
- mybatis.mapper-locations是MyBatis映射器的位置,这里指定了mapper目录下的所有XML文件;
- mybatis-plus.configuration.log-impl是MyBatis Plus的日志实现类,这里使用了StdOutImpl输出到控制台;
- spring.mvc.pathmatch.matching-strategy是Spring MVC路径匹配策略,这里使用了Ant风格的路径匹配;
- spring.servlet.multipart.max-file-size和spring.servlet.multipart.max-request-size是文件上传的限制,这里限制单个文件最大为100MB,整个请求最大为100MB。
8、pom.xml
这是一个Maven项目的配置文件pom.xml,用于管理Java项目的依赖和构建。它定义了项目的信息、父项目、依赖关系、插件等配置。
三、前端层面
1、css_assets/main.css
这段代码是一个全局CSS样式表,它包含了一些通用的样式设置和类名定义。下面是对每个部分的解释:
1. 全局样式设置:这部分代码针对所有HTML元素设置了外边距(margin)和内边距(padding)为0,并使用`box-sizing: border-box;`来确保元素的宽度和高度包括边框和内边距。
2. HTML和body元素的高度设置为100%:这部分代码将HTML和body元素的高度设置为100%,使整个页面的高度充满整个视口。
3. 常用样式定义:这部分代码定义了一些常用的CSS类名,用于快速应用样式。例如,`.ml-5`表示左边距为5像素,`.ml-10`表示左边距为10像素,`.mr-5`表示右边距为5像素,`.pd-10`表示上下内边距为10像素。
4. 表格头颜色:这部分代码定义了一个名为`.headerBg`的CSS类,用于设置表格头部的背景颜色为浅灰色(#eee)。
5. 滚动条样式美化:这部分代码用于美化浏览器中的滚动条样式。通过设置滚动条的宽度和高度为5像素,以及滚动条滑块(thumb)的圆角、阴影和背景颜色,以及滚动条轨道(track)的阴影和背景颜色,使得滚动条看起来更加美观。
这些样式可以在Vue项目中的组件中使用,以实现统一的样式效果。
2、js_router/router.js
这段代码是一个Vue.js项目中的路由配置文件,主要实现了以下功能:
1. 导入Vue、VueRouter库以及各个组件和状态管理库。
2. 启用VueRouter插件。
3. 定义了路由配置数组,包含登录、注册、404等页面的路由信息。
4. 创建VueRouter实例,设置路由模式为history,并传入基础路径和路由配置数组。
5. 定义了一个名为setRoutes的函数,用于动态添加路由。该函数从localStorage中获取菜单列表数据,根据数据中的路径和名称动态生成路由配置,并将其添加到finalRoute对象中。最后将finalRoute添加到路由实例中。
6. 定义了一个名为clearRouter的函数,用于重置路由。通过重新创建一个新的VueRouter实例并赋值给router.matcher来实现路由的重置。
7. 调用setRoutes()函数,用于在页面刷新时更新路由。
8. 使用router.beforeEach方法定义了一个全局前置守卫,用于在路由切换前执行一些操作。在这个例子中,它将即将访问的路由名称存储到localStorage中,并触发状态管理库中的数据更新。如果找不到匹配的路由,则根据是否存在菜单信息跳转到相应的页面。
9. 导出router实例,以便在其他地方使用。
3、js_store/myVuex.js
这段代码的作用是创建一个名为myVuex的Vuex存储对象,用于管理Vue应用程序的状态。它包含两个属性:state和mutations。state属性中有一个currentPathName字段,用于存储当前路径名称。mutations属性中有两个方法:setStateCurrentPathName和userLogout。setStateCurrentPathName方法用于从localStorage中获取currentPathName的值并设置到state.currentPathName中。userLogout方法用于实现全局退出功能,包括清空缓存、跳转到登录页面以及重置清空路由。最后,将myVuex存储对象导出以便在其他地方使用。
4、js_util/axios.js
这段代码是一个Vue项目中的axios配置模块,主要作用是封装axios请求,实现统一处理请求和响应的功能。
1. 首先导入了axios和element-ui库,以及从public/config中导入WHITE_IP变量。
2. 创建了一个名为$http的axios实例,设置了基础URL和超时时间。
3. 配置了请求拦截器,在发送请求前添加了一些自定义的处理逻辑,如设置请求头中的Content-Type和token。
4. 配置了响应拦截器,在接收到响应后根据响应的状态码进行相应的处理,如显示错误消息。
5. 最后将$http对象导出,供其他模块使用。
5、vue.config.js
这段代码是用于配置 Vue.js 项目的。
1. `const {defineConfig} = require('@vue/cli-service')`: 这一行导入了 `defineConfig` 函数,它是 Vue CLI 服务的一部分。`defineConfig` 函数用于定义项目的配置。
2. `module.exports = defineConfig({`: 这一行使用 `module.exports` 将配置对象导出,以便其他模块可以访问和使用这个配置。
3. `transpileDependencies: true`: 这是配置对象的一个属性,设置为 `true` 表示将所有依赖项进行转译。这意味着在构建过程中,所有的依赖项(包括第三方库)都会被转译成浏览器可以理解的 JavaScript 代码。
4. `})`: 这一行结束了配置对象的声明。
总结起来,这段代码的作用是在 Vue.js 项目中启用了对依赖项的转译功能。
6、package.json
这是一个Vue项目的`package.json`文件,它包含了项目的名称、版本、依赖和开发依赖等信息。
1. `name`字段表示项目的名称,这里是"white"。
2. `version`字段表示项目的版本,这里是"0.1.0"。
3. `private`字段表示项目是否为私有,这里设置为`true`,表示该项目是私有的。
4. `scripts`字段定义了一些脚本命令,如`serve`和`build`。`serve`命令用于启动开发服务器,`build`命令用于构建生产环境的代码。
5. `dependencies`字段列出了项目所需的所有依赖包及其版本号。这些依赖包包括:
- @babel/core: Babel的核心库
- @babel/preset-env: Babel的预设环境
- axios: 用于发送HTTP请求的库
- core-js: JavaScript标准库的polyfill
- echarts: 一个开源的数据可视化库
- element-ui: 基于Vue的UI组件库
- mavon-editor: 一个轻量级的Markdown编辑器
- video.js: 一个HTML5视频播放器
- vue: Vue.js框架本身
- vue-router: Vue的路由管理器
- vue-socket.io: Vue的Socket.IO插件
- vue-video-player: 一个基于Vue的视频播放器
- vuex: Vue的状态管理库
- wangeditor: 一个富文本编辑器
6. `devDependencies`字段列出了项目的开发依赖包及其版本号。这些依赖包包括:
- @vue/cli-plugin-babel: Vue CLI的Babel插件
- @vue/cli-plugin-router: Vue CLI的路由插件
- @vue/cli-service: Vue CLI服务
- vue-template-compiler: Vue模板编译器
7. `browserslist`字段定义了项目支持的浏览器范围,这里表示支持市场份额大于1%的浏览器,以及最新的两个版本,不包括已经死亡的浏览器。
7、VUE页面部分
【1】main.js
这段代码是一个Vue.js应用程序的入口文件。它主要做了以下几件事情:
1. 导入Vue框架和App组件,这是构建Vue应用程序的基本元素。
2. 导入路由配置,这是用于管理应用程序页面之间导航的模块。
3. 导入ElementUI组件库和其样式文件,ElementUI是一个基于Vue的组件库,提供了丰富的UI组件和样式。
4. 导入全局样式表,这是应用于整个应用程序的CSS样式。
5. 导入自定义的axios工具,axios是一个基于Promise的HTTP客户端,用于发送异步请求。
6. 导入自定义的Vuex管理全局存储,Vuex是一个专为Vue.js应用程序开发的状态管理模式。
7. 导入mavonEditor编辑器和其样式文件,mavonEditor是一个轻量级的Markdown编辑器。
8. 使用Vue.use()方法将mavonEditor插件挂载到Vue实例上,使其可以在应用程序中使用。
9. 将http挂载到Vue原型上,以便在组件中使用。
10. 关闭生产环境的提示信息,以避免在生产环境中显示不必要的警告信息。
11. 使用Vue.use()方法将ElementUI插件挂载到Vue实例上,并设置其大小为mini。
12. 创建一个新的Vue实例,并将App组件渲染到id为app的DOM元素上。
【2】App.vue
这段代码是一个Vue.js组件的模板,它定义了一个包含一个`<router-view/>`元素的容器。
在`<template>`标签内,有一个`<div>`元素,其id为"app"。这个`<div>`元素将作为布局展示容器,用于显示应用程序的内容。
在`<div>`元素内部,有一个`<router-view/>`元素。这是Vue Router提供的一个特殊组件,用于根据当前的路由动态渲染相应的组件。当用户导航到不同的路由时,`<router-view/>`会根据当前路由显示对应的组件内容。
在`<style scoped>`标签内,定义了CSS样式规则。通过设置`#app`选择器的高度为100%,使得该容器占据整个可用空间。
综上所述,这段代码的作用是创建一个Vue.js组件,其中包含一个用于显示不同路由内容的容器,并设置了容器的高度为100%。
【3】Composite.vue
这段代码是一个Vue组件,用于构建一个具有左侧边栏和右侧主体的页面布局。
在模板部分,使用了Element UI库提供的`<el-container>`、`<el-aside>`、`<el-header>`和`<el-main>`等组件来创建页面结构。其中:
1. `<el-aside>`表示左侧边栏,使用了一个名为`Left`的子组件,并传递了两个属性给该子组件:`collapseFlag`表示是否折叠,`logoTextShowFlag`表示是否显示Logo文本。
2. `<el-container>`是整个页面的容器,内部包含了一个`<el-header>`和一个`<el-main>`。
3. `<el-header>`表示右侧头部,使用了一个名为`Top`的子组件,并传递了三个属性给该子组件:`foldData`表示折叠按钮的样式类名,`foldClick`表示折叠按钮的点击事件处理函数,`user`表示用户信息。
4. `<el-main>`表示右侧主体区域,内部使用了`<router-view>`组件来展示当前路由对应的内容。
在脚本部分,定义了组件的数据和方法:
- `data()`方法返回了组件的数据对象,包括折叠相关的数据、侧边栏宽度、是否显示Logo文本以及用户信息。
- `methods`对象中定义了两个方法:
- `person_fff_user(val)`方法用于接收来自子组件的数据,并通过HTTP请求更新用户信息,并将更新后的用户信息存储到本地存储中。
- `foldClick()`方法用于处理折叠按钮的点击事件,切换折叠状态,并根据状态改变侧边栏的宽度、折叠按钮的样式类名以及是否显示Logo文本。
最后,在样式部分定义了一些CSS样式规则,用于控制页面元素的外观。
【4】Left.vue
这段代码是一个Vue组件,用于创建一个左侧菜单栏。它使用了Element UI库中的`<el-menu>`、`<el-menu-item>`和`<el-submenu>`等组件来构建菜单结构。
在模板部分,首先定义了一个名为"Left-container"的容器,并设置了高度为100%。然后使用`<el-menu>`组件创建了菜单,通过`:default-openeds="openList"`属性设置默认展开的菜单项,通过`:collapse="fff_left_collapseFlag"`属性控制菜单是否折叠,通过`router`属性开启路由功能。
接下来,使用`v-for`指令遍历`menuList`数组,根据每个菜单项的属性判断是一级菜单还是二级菜单,并分别使用`<el-menu-item>`和`<el-submenu>`组件进行渲染。对于一级菜单,直接使用`<el-menu-item>`组件,并通过`:index="item.path"`属性设置菜单项的路径;对于二级菜单,使用`<el-submenu>`组件,并在其内部再使用`<el-menu-item>`组件渲染子菜单项。
在样式部分,使用了`scoped`属性限制样式只作用于当前组件,并使用了Less语言编写样式规则。
在脚本部分,定义了组件的名称、接收父组件传递的值以及数据和方法。其中,`data()`方法返回了菜单列表和默认展开的菜单项列表,通过从本地存储中获取数据进行初始化。`created()`方法可以在组件创建后执行一些操作,这里可以添加对菜单数据的处理逻辑。
总体来说,这段代码实现了一个可折叠的左侧菜单栏,可以根据传入的数据动态生成菜单项,并支持一级和二级菜单的展示。
【5】Top.vue
这段代码是一个Vue组件,用于创建一个顶部导航栏。它包含以下功能:
1. 收缩按钮:通过点击一个图标(`span`元素),可以展开或收缩菜单。
2. 位置标记面包屑:显示当前页面的位置,使用`el-breadcrumb`组件实现。
3. 个人中心:包含一个下拉菜单,用于显示用户的个人信息、修改密码和退出登录等功能。
在`<template>`部分,使用了Vue的模板语法来定义组件的结构。`<div>`元素作为容器,包含了收缩按钮、面包屑和下拉菜单等子元素。
在`<script>`部分,定义了组件的行为和数据。`props`属性用于接收父组件传递的数据,如`fff_top_foldData`、`fff_top_foldClick`、`fff_top_pathName`和`fff_top_user`。`data`函数返回一个空对象,表示该组件没有自己的数据。`methods`对象定义了三个方法:`person`、`password`和`logoutClick`,分别用于跳转到个人信息页面、修改密码页面和执行退出登录操作。`computed`对象定义了一个计算属性`currentPathName`,用于获取当前路径名称。
在`<style>`部分,使用了`scoped`属性来限制样式只应用于当前组件。定义了一些CSS样式,如字体大小、边框和行高等,以美化组件的外观。
【6】Login.vue/ValidCode.vue
这段代码是一个Vue组件,用于实现登录功能。它包含一个表单,用户可以输入账号、密码和验证码进行登录。表单使用Element UI库中的el-form组件进行创建,并设置了相应的校验规则。当用户点击登录按钮时,会触发loginClick方法,该方法会先对表单进行校验,如果校验通过,再发送请求到后端进行登录验证。如果登录成功,会将用户信息和菜单信息存储到浏览器的localStorage中,并根据用户角色跳转到不同的页面。
这段代码是一个Vue组件,用于生成一个包含随机字符的验证码。
在模板部分,它定义了一个div元素,这个元素有一个点击事件处理器`refreshCode`,当用户点击这个元素时,会调用这个方法来刷新验证码。在这个div内部,使用v-for指令遍历codeList数组,每个元素都是一个对象,包含一个字符和一些样式信息。这些样式信息是通过getStyle方法获取的。
在脚本部分,它定义了一个名为ValidCode的Vue组件。这个组件有四个props:width、height、length和refresh。其中,width和height用于设置验证码的宽度和高度,length用于设置验证码的长度,refresh用于设置刷新验证码的时间间隔。
在data函数中,定义了一个名为codeList的空数组,用于存储验证码的字符和样式信息。
在mounted钩子函数中,调用了createdCode方法来生成验证码。
在methods对象中,定义了三个方法:refreshCode、createdCode和getStyle。refreshCode方法用于刷新验证码,createdCode方法用于生成验证码,getStyle方法用于获取字符的样式信息。
在样式部分,定义了.ValidCode类的样式,包括display、justify-content、align-items和cursor属性。
【7】Register.vue
这段代码是一个Vue组件,用于实现用户注册功能。主要包括以下几个部分:
1. 模板(template):定义了页面的结构,包括一个登录容器、标题、表单和按钮等元素。
2. 数据(data):定义了组件的数据,包括用户信息(user)和表单校验规则(ruleList)。
3. 方法(methods):定义了组件的方法,包括点击注册按钮时触发的loginClick方法。
4. 样式(style):定义了组件的样式,包括登录容器、标题、输入框和按钮等元素的样式。
在loginClick方法中,首先对表单进行校验,如果校验通过,再判断两次输入的密码是否一致,如果不一致则提示错误信息。如果校验通过且密码一致,则发送POST请求到"/big/register"接口进行注册,根据返回的结果进行相应的提示。
【8】Password.vue
这段代码是一个Vue组件,用于修改用户密码。它包含一个表单,用户可以输入用户名、新密码和确认新密码。表单使用Element UI库中的el-card、el-form、el-form-item和el-input等组件进行布局和样式设置。
在data()函数中,定义了passwordForm对象来存储表单数据,user对象用于存储当前用户的信息,ruleList对象定义了新密码和确认新密码的验证规则。
在created()函数中,将当前用户的其他信息赋值给passwordForm对象。
在methods中,定义了一个insertOrUpdate()方法,用于提交表单数据并更新用户密码。首先通过this.$refs["passwordForm"].validate()方法对表单进行校验,如果校验通过,则判断两次输入的新密码是否一致,如果不一致则提示错误信息。如果一致,则发送POST请求到"/user/insertOrUpdate"接口,将修改后的密码和其他用户信息传递给后端进行更新操作。如果更新成功,则提示修改成功并自动退出登录;否则提示修改失败并显示错误信息。
最后,使用了scoped lang="less"的style标签,但未给出具体的样式内容。
【9】Person.vue
这段代码是一个Vue组件,用于显示和编辑用户的个人信息。它包含一个表单,用户可以在其中输入或修改他们的用户名、角色、昵称、邮箱、手机和地址。此外,还有一个头像上传功能,用户可以选择一张图片作为自己的头像。
在`<template>`部分,首先定义了一个`el-card`容器,然后在其中放置了一个`el-form`表单。表单中包含了多个`el-form-item`,每个`el-form-item`都有一个标签和一个输入框,用于输入或显示用户的相关信息。对于头像部分,使用了`el-upload`组件来实现图片上传功能。
在`<script>`部分,首先引入了动态IP地址,然后定义了一个名为`Person`的Vue组件。在组件的`data`函数中,定义了一些变量,如`userForm`用于存储用户的信息,`user`用于存储从本地存储中获取的用户信息。在组件的`created`生命周期钩子中,通过发送POST请求来获取用户的信息,并将其赋值给`userForm`。
在组件的`methods`中,定义了两个方法:`onSuccess`用于处理图片上传成功后的操作,将返回的图片地址赋值给`userForm.avatar`;`insertOrUpdate`用于更新或插入用户信息,通过发送POST请求到服务器,根据返回的结果提示用户操作成功或失败。
在`<style>`部分,定义了一些样式类,用于控制组件的外观。
【10】Home.vue
这段代码是一个Vue组件,用于展示一个包含欢迎语、时间轴和统计图的网页。
在模板部分,使用了Element UI库中的`el-row`和`el-col`组件来创建一个栅格布局。第一行显示了一个欢迎语,第二行分为两个部分:左侧是一个时间轴,展示了一些关键的时间点和对应的事件;右侧是一个统计图示例,使用ECharts库绘制了一个折线图,展示了每日交互次数的预测数据和实际数据。
在脚本部分,定义了一个名为"Home"的Vue组件。在`data`函数中,根据屏幕宽度计算了统计图的高度。在`mounted`钩子函数中,调用了`line`方法来初始化ECharts图表。`line`方法首先获取了id为"myCharts"的DOM元素,然后使用`echarts.init`方法初始化了一个ECharts实例。接下来,定义了一个名为"option"的对象,包含了图表的配置信息,如标题、提示框、图例、坐标轴等。最后,通过调用`myChart.setOption(option)`方法将配置应用到图表上,实现了图表的绘制。
在样式部分,使用了`<style scoped>`标签来限制样式的作用范围,确保样式只应用于当前组件。
【11】Zvoice.vue
这段代码是一个Vue组件,用于实现一个聊天窗口。主要功能包括:
1. 展示大模型案件询问的聊天窗口,窗口中包含一个滚动区域用于展示会话内容。
2. 用户可以通过输入框发送问题,点击发送按钮后,问题会显示在滚动区域的聊天记录中。
3. 提供导出记录和同步到案件管理、导出总结、清空历史等功能按钮。
4. 启动身份信息验证,决定是否启动大模型。验证通过后,用户可以开始提问。
5. 提供语音交互功能,用户可以通过语音与大模型进行交流。
【12】ZManage.vue
这段代码是一个Vue组件,用于展示和管理案件信息。主要功能包括:
1. 检索部分:根据案件标题和总结进行搜索,支持重置操作。
2. 表格部分:展示案件列表,包括序号、案件标题、案件总结、案件记录账号、案件记录时间等列。对于管理员角色的用户,还提供了修改、删除、记录和总结的操作按钮。
3. 分页部分:实现对案件列表的分页显示,可以调整每页显示的数量和跳转到指定页码。
4. 新增或修改弹窗:用于添加新的案件信息或修改已有的案件信息,包括案件标题、嫌疑人身份证和案件总结等字段。
【13】Role.vue
这段代码是一个Vue组件,用于实现角色管理功能。主要包括以下部分:
1. 检索部分:包括姓名和描述的输入框,以及搜索、重置按钮。点击搜索按钮会调用`selectListPage()`方法进行分页查询;点击重置按钮会调用`reset()`方法重置查询条件。
2. 新增与删除部分:包括新增按钮和批量删除按钮。点击新增按钮会弹出新增角色的弹窗;点击批量删除按钮会弹出确认删除的弹窗。
3. 表格部分:展示角色列表,包括选择框、ID、角色名称、角色描述等列。同时提供分配菜单、编辑和删除操作。
4. 分页部分:包括分页控件,可以切换每页显示的数量、跳转到指定页码等。
5. 新增或修改弹窗:用于新增或修改角色信息,包括角色名称和描述的输入框。点击确定按钮会调用`confirmInsertOrUpdate()`方法进行保存;点击取消按钮会关闭弹窗。
6. 分配菜单弹框:用于分配菜单给指定角色。展示树形结构的菜单列表,支持多选。点击确定按钮会调用`confirmInsertOrUpdate()`方法进行保存;点击取消按钮会关闭弹窗。
【14】User.vue
这段代码是一个Vue组件,用于展示用户列表、搜索、分页、新增、删除、修改等功能。具体功能如下:
1. 检索部分:通过输入姓名、邮箱和地址进行搜索,点击搜索按钮后调用selectListPage方法进行搜索。重置按钮用于清空搜索条件。
2. 新增与删除部分:点击新增按钮弹出新增用户弹窗,填写用户信息后点击确定按钮调用confirmInsertOrUpdate方法进行新增。批量删除按钮用于批量删除用户,点击后会弹出确认框,点击确定后调用confirmRemoveIdList方法进行删除。
3. 导入功能:点击导入按钮后选择xlsx文件进行导入,导入成功后会调用onImportSuccess方法。
4. 导出功能:点击导出按钮后调用list_export方法进行导出。
5. 表格部分:展示用户列表,包括ID、用户名、角色、昵称、邮箱、手机、地址等字段。操作列包括查看授课(老师)、查看选课(学生)、编辑和删除按钮。点击相应按钮后会弹出相应的弹窗进行操作。
6. 分页部分:实现分页功能,可以设置每页显示的数量和跳转到指定页码。
7. 新增或修改弹窗:用于新增或修改用户信息,包括用户名、角色、昵称、邮箱、手机和地址等字段。点击确定按钮后调用confirmInsertOrUpdate方法进行保存。
【15】404.vue
这段代码是一个Vue组件,用于显示一个404页面。当用户访问不存在的路由时,会显示这个页面。
1. `<template>`部分是组件的HTML模板,它包含一个居中对齐的div容器,容器内有一个h1标题和一个h2标题。h1标题显示“404 NotFound 请您检查路由地址是否正确”,提示用户检查路由地址是否正确。h2标题显示“您也可以联系微信:15921291928”,提供联系方式。
2. `export default { name: "NotFound" }`是组件的JavaScript部分,定义了组件的名称为"NotFound"。
3. `<style scoped lang="less">`部分是组件的样式,但是这里没有定义任何样式,所以这个组件不会有特殊的样式效果。