# 项目基础框架+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" }];
});
```