# 项目基础框架+IA聊天
**Repository Path**: hu-yanjun/project-basic-framework-ai
## Basic Information
- **Project Name**: 项目基础框架+IA聊天
- **Description**: 项目基础框架+IA聊天
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-08-08
- **Last Updated**: 2025-04-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Element-UI, Axios, vue2
## README
# 开发文档
## 一, 核心技术
+ npm:node.js的包管理工具,用于统一管理我们前端项目中需要用到的包、插件、工具、命令等,便于开发和维护。
+ ES6:Javascript的新版本,ECMAScript6的简称。利用ES6我们可以简化我们的JS代码,同时利用其提供的强大功能来快速实现JS逻辑。
+ vue-cli:Vue的脚手架工具,用于自动生成Vue项目的目录及文件。
+ vue-router: Vue提供的前端路由工具,利用其我们实现页面的路由控制,局部刷新及按需加载,构建单页应用,实现前后端分离。
+ vuex:Vue提供的状态管理工具,用于统一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象。
+ element-ui:基于MVVM框架Vue开源出来的一套前端ui组件。
## 二,环境部署
+ 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。
  > npm install --registry=https://registry.npm.taobao.org
+ 本地开发 启动项目
  > npm run dev
##  三,模块开发
> `在 @/views 文件下 创建对应的文件夹,一个文件夹对应一个模块,模块里面一个路由对应一个 .vue 文件 ,各个模块维护自己的components组件。`
> `创建文件尽量命名有意义和模块意思相关的英文`
```apl
# 示例
views/
  system/
    components/
    user.vue
    role.vue
  ...
新增 api
# 示例
api/
  system/
    user.js
    role.js
  ...
```
## 四,通用方法
###  $auth  Array 指令对象 
+ 用户权限
  ```javascript
  hasPermi    // 验证用户是否具备某权限
  hasPermiOr   // 验证用户是否含有指定权限,只需包含其中一个
  hasPermiAnd  // 验证用户是否含有指定权限,必须全部拥有
  this.$auth.hasPermi("system:user:add")
  this.$auth.hasPermiOr(["system:user:add", "system:user:update"])
  this.$auth.hasPermiAnd(["system:user:add", "system:user:update"])
  ```
+ 角色权限
  ```javascript
  hasRole   // 验证用户是否具备某角色
  hasRoleOr   // 验证用户是否含有指定角色,只需包含其中一个
  hasRoleAnd   // 验证户是否含有指定角色,必须全部拥有
  this.auth.hasRole("admin")
  this.auth.hasRoleOr(["admin", "common"])
  this.$auth.hasRoleAnd(["admin", "common"])
  ```
  > **提示**
  >
  > 按钮权限可使用 v-hasPermi指令来判断。元素标签组件,需要设置v-if,可以使用全局权限判断函数,用法和指令 v-hasPermi 类似。
  ```vue
  
    
      用户管理
      参数管理
      角色管理
      定时任务
     
  
  ```
### $modal 对象
+ 反馈信息 (`主要使用这个弱提示`)
  ```javascript
  this.$modal.msg("默认反馈")
  this.$modal.msgError("错误反馈")
  this.$modal.msgSuccess("成功反馈")
  this.$modal.msgWarning("警告反馈")
  ```
+ 提示信息
  ```javascript
  this.$modal.alert("默认提示")
  this.$modal.alertError("错误提示")
  this.$modal.alertSuccess("成功提示")
  this.$modal.alertWarning("警告提示")
  ```
+ 通知信息
  ```javascript
  this.$modal.notify("默认通知");
  this.$modal.notifyError("错误通知");
  this.$modal.notifySuccess("成功通知");
  this.$modal.notifyWarning("警告通知")
  ```
+ 确认弹窗信息
  ```javascript
  /**
   * type = success / info / warning / error
  **/
  this.$modal.confirm(content, title = "提示", type = "warning") .then(() => {
     console.log('点击确认按钮')
  }).catch(() => {
     console.log('点击取消按钮')
  })
  ```
  
+ 遮罩层信息
  ```javascript
  // 打开遮罩层
  this.$modal.loading("正在导出数据,请稍后...")
  // 关闭遮罩层
  this.$modal.closeLoading()
  ```
### $test 对象
`$test `对象用于做检验规则,正则匹配等,定义在`plugins/test`文件中,方法如下:
```javascript
/* 部分方法示例 完整看plugins/test/test.js */
this.$test.isNull('value') // 验证是否为空
this.$test.isMobile('value') // 验证手机格式
this.$test.isIdCard('value') // 验证身份证号码
this.$test.isEmail('value') // 验证电子邮箱格式
....
// 可以自定义去加
```
### $utils 对象
`$utils `对象用于封装一些js工具库,定义在`plugins/utils`文件中,方法如下:
```javascript
/* 部分方法示例 完整看plugins/utils/utils.js */
/**
 * @function handleTree 构造树型结构数据
 * @function deepClone 深度克隆
 * @function queryParams 对象转url参数
 * @function getQueryString 获取url拼接参数
 * ..... 可以自定义去加
 */
```
### $download 下载
`注意请求添加 responseType: 'blob'`
+ 根据下载url路径下载
  ```javascript
  //const fileUrl = "https:://1chalk.com/profile/upload/xxxxxxx.png;
  
  // this.$download.saveAs(fileUrl, '文件名称')
  ```
+ 根据二进制文档流下载
  ```javascript
  // 调用方法
  this.$download.saveAs(dataBlob, '文件名称')
  
  ```
  更多文件下载操作
  ```javascript
  // 自定义文本保存
  var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
  this.$download.saveAs(blob, "hello world.txt");
  
  // 自定义文件保存
  var file = new File(["Hello, world!"], "hello world.txt", {type: "text/plain;charset=utf-8"});
  this.$download.saveAs(file);
  
  // 自定义data数据保存
  const blob = new Blob([data], { type: 'text/plain;charset=utf-8' })
  this.$download.saveAs(blob, name)
  
  // 根据地址保存文件
  this.$download.saveAs("https://ruoyi.vip/images/logo.png", "logo.jpg");
  ```
### 使用图标
全局 Svg Icon 图标组件。也可以使用Element 图标库
默认在 `@/assets/icons` 中注册到全局中,可以在项目中任意地方使用。所以图标均可在 `@/assets/icons/svg`可自行添加或者删除图标,所有图标都会被自动导入,无需手动操作。
#### 使用图标
```vue
```
#### 改变颜色
`svg-icon`默认会读取父级`color`,你可以改变父级的`color`或者直接改变`fill`的颜色即可。
> **提示**
>
> 需要下载图标可去 [iconfont](https://www.iconfont.cn/home/index) 矢量图标库下载.svg格式,规范一下图标的大小问题,不然可能会造成项目中的图标大小尺寸不统一的问题。 项目中使用的图标都是 128*128 大小规格的。
### 数据字典
字典管理是用来维护数据类型的数据,如下拉框、单选按钮、复选框、树选择的数据,方便系统管理员维护。主要功能包括:字典分类管理、字典数据管理
**方法使用**
```javascript
export default {
  dicts: ['字典类型'],
  ...
}
```
```vue
```
## 五,全局组件
### 树形选择器
```vue
	
```
### 富文本组件
```vue
/**
* 组件属性值
* height 高度
* minHeight 最小高度
* readOnly 只读
* fileSize 上传文件大小限制(MB)
*/
	
```
### 表格
```vue
/** 
* 组件属性值 
* tableData 数据
* tableCol 表格 
* ...可参考element table属性
*/
      
      
```
### 分页组件
```vue
    
```
### 手动上传图片组件
> * 组件属性值
> * limit 图片数量限制 默认 5
> * fileType 文件类型, 例如['png', 'jpg', 'jpeg']
> * fileList  [ url ]默认选择图片
> * change(file, iamge)
```vue
/**
* 组件属性值
* limit 图片数量限制 默认 99
* fileType 文件类型, 例如['png', 'jpg', 'jpeg']
* fileList  [ url, uid ]默认选择图片
* change([file, all])
* remove([file, all])
**/
```
### 文件上传
```vue
/**
* 组件属性值
* limit 图片数量限制 默认 99
* fileType 文件类型, 例如['png', 'jpg', 'jpeg']
* fileList  [ url, uid ]默认选择图片
* change([file, all])
* remove([file, all])
* upload file
**/
```
### 文件查询下载 按钮
```vue
/**
* 组件属性值
* path 后台返回地址
* name 下载查看文件名称
**/
```
### 清除表单
```js
this.resetForm("name");
```
### 全屏弹窗
```vue
/**
* 组件属性值
// 标题
title {type: String} 
// 是否显示弹窗
showModal.sync: {
    type: Boolean,
    default: false,
},
// 确认加载
loading: {
    type: Boolean,
    default: false,
},
// 是否显示确认按钮
submit: {
    type: Boolean,
    default: true,
},
// 是否显示取消按钮
close: {
    type: Boolean,
    default: true,
}
// 弹窗状态 1,2,3
HusetLook: {
    default: '',
}
// 取消事件
 @close
// 确认事件
 @submit
**/
    
```
### 抽屉弹窗
```vue
/**
* 组件属性值
// 标题
title {type: String} 
// 是否显示弹窗
open.sync: {
    type: Boolean,
    default: false,
},
// 确认加载
loading: {
    type: Boolean,
    default: false,
},
// 是否显示确认按钮
submit: {
    type: Boolean,
    default: true,
},
// 是否显示取消按钮
close: {
    type: Boolean,
    default: true,
}
// 取消事件
 @close
// 确认事件
 @submit
**/
    
```
###  修改element-ui样式
`在组件内修改elementui样式需要加上::v-deep, less需要使用 /deep/ 正常css需要使用 >>>`
- 修改单个elementui的样式
  ```css
  
  
                      
  ```
- 修改多个elementui的样式
  ```css
  
  ```
- el-form 必填属性 `class="is-required"`
###  开发规范
- 命名规范
```text
项目命名
	全小写-隔开  my-project-name
    
目录命名: 全小写 
文件命名:小写开头、驼峰命名、或全小写
    tempLate.html
    tempLate.css
    tempLate.js
    
css命名规范
	class 驼峰命名||下划线_相隔命名
 
js命名规范
	变量:小驼峰         maxCount
    常量:全大写_隔开     MAX_COUNT
    方法:
    	小驼峰、
        前缀应当为动词(get/set/is/has/can/load/hand)
        getData()
```
- 注释必须要有,每个方法添加好注释,个别特殊标签,变量也需要加。
- 所有的 input输入框必须通过v-model.trim绑定;去除首末位空格。
- 输入框带有手机号,邮箱,密码....输入框,必须添加校验规则。
- 列表数据必须加loading加载,提交保存按钮也必须要加loading加载,防止重复提交。
- 有关敏感重要的操作,必须加二次确认框入;如:删除操作
>`举例:` 
>query	查询 
>update	修改
>add	新增
>delete	删除
>download 下载 | 导出
>print	导出
>import  导入
>other   其他
## 六,AI模块
> api/aiChat.js AI聊天api
>
> store/modules/aiChat.js 逻辑处理
>
> api/components/AiChat AI聊天vue代码
### AI聊天框
```vue
    
```
## 七,API
### 工具类
```vue
let params = {
    page: 1,
    limit: 10,
  };
  
/**
 * 操作类请求
 * requestFn: function request
 * params: 参数
 * message: 弱提示
 * function: 回调函数
 **/
  this.HandleRequestSubmit(http.getList, params, '自定义提示').then(({ result }) => {
    this.showModal = false;
    this.getList();
  });
  
  
/**
 * 查询类请求
 * requestFn : function request
 * params: 参数
 * setLoading 加载修改状态
 **/
  this.HandleRequestQuery(http.getList, params, this.MixinSetLoading).then(({ result }) => {
    this.tableData = [{ name: "name", name1: "name1", name2: "name2" }];
  });
```