diff --git a/.env.development b/.env.development
index daa0fc6d3307463531e311af6c87afa56dd5b2f0..11466b5062c93901790901464a368efc570f6d70 100644
--- a/.env.development
+++ b/.env.development
@@ -1,14 +1,8 @@
## 开发环境
-
-# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV='development'
+# 应用端口
VITE_APP_PORT = 3000
-# API请求前缀
-VITE_APP_BASE_API = '/dev-api'
-
-# proxy代理配置
-VITE_APP_API_URL = 'http://vapi.youlai.tech' # 线上接口
-# VITE_APP_API_URL = 'http://localhost:8989' # 本地接口,本地启动后端:https://gitee.com/youlaiorg/youlai-boot
-# VITE_APP_API_URL = 'http://localhost:3000' # 本地Mock
+# 代理前缀
+VITE_APP_BASE_API = '/prod-api'
diff --git a/.env.production b/.env.production
index c8c69313c5eb52555804170b895847db21ae5f59..a2d828cb21d19bfee5fb3bf7e51506ef38780a2c 100644
--- a/.env.production
+++ b/.env.production
@@ -1,9 +1,6 @@
## 生产环境
+NODE_ENV='production'
-VITE_APP_PORT = 3000
-
-# API请求前缀
+# 代理前缀
VITE_APP_BASE_API = '/prod-api'
-# proxy代理配置
-VITE_APP_API_URL = "http://vapi.youlai.tech"
diff --git a/.gitignore b/.gitignore
index 1fd449a71e4486e3776d184cf894fc1a23a3ba05..ce69d70d1bce4e63f4f5ebb41cd6d8f1156b93ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,9 @@
node_modules
.DS_Store
-dist
+dist*
dist-ssr
*.local
-
+.vscode
# Editor directories and files
.idea
*.suo
@@ -11,6 +11,7 @@ dist-ssr
*.njsproj
*.sln
*.local
+*.d.ts
package-lock.json
pnpm-lock.yaml
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000000000000000000000000000000000000..37c19b070a264c5051f7ee72ff65efc019f2991e
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+use-node-version=16.20.2
\ No newline at end of file
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
deleted file mode 100644
index 7528cf214ecd4464b3b6d1534526ab74248d5b4a..0000000000000000000000000000000000000000
--- a/.vscode/extensions.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "recommendations": ["Vue.volar", "lokalise.i18n-ally","esbenp.prettier-vscode"]
-}
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 1e824bfafc3e62015f4236fb5227673f056795ae..0000000000000000000000000000000000000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,80 +0,0 @@
-{
- "typescript.tsdk": "./node_modules/typescript/lib",
- "npm.packageManager": "pnpm",
- "editor.tabSize": 2,
- "editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode",
- "editor.quickSuggestions": {
- "other": true,
- "comments": true,
- "strings": true
- },
- "editor.codeActionsOnSave": {
- "source.fixAll": true,
- "source.fixAll.eslint": true,
- "source.fixAll.stylelint": true
- },
- "files.eol": "\n",
- "search.exclude": {
- "**/node_modules": true,
- "**/*.log": true,
- "**/*.log*": true,
- "**/bower_components": true,
- "**/dist": true,
- "**/elehukouben": true,
- "**/.git": true,
- "**/.gitignore": true,
- "**/.svn": true,
- "**/.DS_Store": true,
- "**/.idea": true,
- "**/.vscode": false,
- "**/yarn.lock": true,
- "**/tmp": true,
- "out": true,
- "dist": true,
- "node_modules": true,
- "CHANGELOG.md": true,
- "examples": true,
- "res": true,
- "screenshots": true,
- "yarn-error.log": true,
- "**/.yarn": true
- },
- "files.exclude": {
- "**/.cache": true,
- "**/.editorconfig": true,
- "**/.eslintcache": true,
- "**/bower_components": true,
- "**/.idea": true,
- "**/tmp": true,
- "**/.git": true,
- "**/.svn": true,
- "**/.hg": true,
- "**/CVS": true,
- "**/.DS_Store": true
- },
- "files.watcherExclude": {
- "**/.git/objects/**": true,
- "**/.git/subtree-cache/**": true,
- "**/.vscode/**": true,
- "**/node_modules/**": true,
- "**/tmp/**": true,
- "**/bower_components/**": true,
- "**/dist/**": true,
- "**/yarn.lock": true
- },
- "i18n-ally.keystyle": "nested",
- "i18n-ally.sortKeys": true,
- "i18n-ally.namespace": false,
- "i18n-ally.pathMatcher": "{locale}/{namespaces}.{ext}",
- "i18n-ally.enabledParsers": ["ts"],
- "i18n-ally.sourceLanguage": "en",
- "i18n-ally.displayLanguage": "zh-CN",
- "i18n-ally.enabledFrameworks": [
- "vue",
- "react"
- ],
- "i18n-ally.localesPaths": [
- "src/lang"
- ],
-}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0559d8c6fe08fb933685600d3db9e5bee8a8b0b..b71e95173f4ab6787ca4d170df13b40690d5bd4c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,40 @@
+# 2.8.1 (2023/01/10)
+
+### ✨ feat
+- 替换 Mock 解决方案 vite-plugin-mock 为 vite-plugin-mock-dev-server 适配 Vite5
+
+# 2.8.0 (2023/12/27)
+
+### ⬆️ chore
+- 升级 Vite4 至 Vite5
+
+# 2.7.1 (2023/12/12)
+
+### 🔄 refactor
+- 将打包后的文件进行分类 (author by [ityangzhiwen](https://gitee.com/ityangzhiwen))
+
+# 2.7.0 (2023/11/19)
+
+### 🔄 refactor
+- 代码重构优化
+- 修改自动导入组件类型声明文件路径
+- 完善 typescript 类型
+
+### 🐛 fix
+- 修复管理页面部分弹窗无法打开问题
+
+
+# 2.7.0 (2023/11/19)
+
+### 🔄 refactor
+- 代码重构
+- 修改自动导入组件类型声明文件路径
+- 完善 typescript 类型
+
+### 🐛 fix
+- 修复管理页面部分弹窗无法打开问题
+
+
# 2.6.3 (2023/10/22)
### ✨ feat
diff --git a/README.md b/README.md
index 1ce8018396d9eaeac42b521592ae5807b8197345..be4623a02ad4560e0df86898592b69308a004daf 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-
-
-
+
+
+
@@ -14,7 +14,7 @@
## 项目介绍
-[vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) 是基于 Vue3 + Vite4+ TypeScript5 + Element-Plus + Pinia 等最新主流技术栈构建的后台管理前端模板(配套后端源码)。
+[vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) 是基于 Vue3 + Vite5+ TypeScript5 + Element-Plus + Pinia 等最新主流技术栈构建的后台管理前端模板(配套[后端源码](https://gitee.com/youlaiorg/youlai-boot))。
项目有以下特性:
@@ -55,7 +55,7 @@
| 环境 | 名称版本 | 备注 |
| -------------------- | :----------------------------------------------------------- | ------------------------------------------------------------ |
| **开发工具** | VSCode | [下载地址](https://code.visualstudio.com/Download) |
-| **运行环境** | Node 16+ | [下载地址](http://nodejs.cn/download) |
+| **运行环境** | Node 18+ | [下载地址](http://nodejs.cn/download) |
| **VSCode插件(必装)** | 1. `Vue Language Features (Volar) `
2. `TypeScript Vue Plugin (Volar) `
3. 禁用 Vetur |  |
@@ -78,6 +78,10 @@ pnpm install
pnpm run dev
```
+## 开启Mock
+
+项目同时支持在线和 Mock 接口,默认使用线上接口,如需替换为 Mock 接口,只需在 `vite.config.ts` 文件的 `plugins` 配置中取消对 `mockDevServerPlugin()` 的注释**即可**。
+
## 项目部署
```bash
@@ -122,27 +126,23 @@ server {
重启 VSCode 尝试
-- **接口切换 Mock**
-
- v2.5.0 版本支持 Mock , 修改 `.env.development` 的 `VITE_APP_API_URL` 值为 `http://localhost:3000` 即可 。
-
- **其他问题**
如果有其他问题或者建议,建议 [ISSUE](https://gitee.com/youlaiorg/vue3-element-admin/issues/new)
-## 接口支持
+## 后端接口
-- **接口调用地址**:[https://vapi.youlai.tech](https://vapi.youlai.tech)
+- **后端接口地址**:[https://vapi.youlai.tech](https://vapi.youlai.tech)
- **接口文档地址**:[在线接口文档](https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5)
-- **OpenAPI文档地址**:[http://vapi.youlai.tech/v3/api-docs](http://vapi.youlai.tech/v3/api-docs)
+- **OpenAPI地址**:[http://vapi.youlai.tech/v3/api-docs](http://vapi.youlai.tech/v3/api-docs)
-- **本地接口**:默认使用线上接口,你可以通过以下步骤完成本地接口环境搭建:
+- **本地接口环境搭建**:
+ - 首先,获取基于 `Java` 和 `SpringBoot` 开发的后端 [youlai-boot](https://gitee.com/youlaiorg/youlai-boot.git) 源码。
+ - 其次,根据后端工程的说明文档 [README.md](https://gitee.com/youlaiorg/youlai-boot#%E9%A1%B9%E7%9B%AE%E8%BF%90%E8%A1%8C) 完成本地启动。
+ - 最后,修改 `vite.config.ts` 文件中的 `server.proxy` 配置项,将 target 的值从 `http://vapi.youlai.tech` 更改为 `http://localhost:8989`。
- > 1. 获取基于 `Java 、SpringBoot` 开发的后端 [youlai-boot](https://gitee.com/youlaiorg/youlai-boot.git) 源码 ;
- > 2. 根据后端工程说明文档 [README.md](https://gitee.com/youlaiorg/youlai-boot#%E9%A1%B9%E7%9B%AE%E8%BF%90%E8%A1%8C) 完成本地启动;
- > 3. 替换 [.env.development](.env.development) 的代理目标地址 `VITE_APP_API_URL` 的值 `vapi.youlai.tech` 为本地的 `localhost:8989`
diff --git "a/api\346\226\207\346\241\243.md" "b/api\346\226\207\346\241\243.md"
new file mode 100644
index 0000000000000000000000000000000000000000..8b0aa1d56fcb6ccd501d6b4946d8e418138b8a0c
--- /dev/null
+++ "b/api\346\226\207\346\241\243.md"
@@ -0,0 +1,393 @@
+# api文档 #
+## 接口说明:
+
+***开发测试接口***
+> http://192.168.50.55:8989
+
+***测试测试接口***
+> 暂无
+
+***生产环境接口***
+> http://weilin.faxinai.cn
+
+
+### 响应参数
+| 参数 | 说明 |
+|:-----|:-------|
+| data | 响应数据 |
+| msg | 响应消息内容 |
+| code | 响应状态码 |
+### 响应状态
+| 状态码 | 说明 |
+|:-----:|:---------|
+| 00000 | 请求成功 |
+| A0400 | 用户请求参数错误 |
+| B0001 | 系统异常 |
+
+
+
+******
+## 案件相关APi接口
+***请求前缀***
+> /api/v1/case/main
+
+### 获取案件列表
+
+***接口地址:***
+> `/listCases`
+
+***请求方式:*** `GET`
+
+***接口描述:*** --
+
+***请求参数:***
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:---------------------------|:--------------------|:-------|:------|:-------------------------------------------------------------------------------------------------------------------------------------------------|
+| keywords | 关键字(法院/被告姓名/省市区/案号) | string | false | |
+| keywordsFollowup | 关键字(办案日志) | string | false | |
+| eventRecordMethod | 录入方式 | int | false | 0:系统录入 1:人工录入 | |
+| eventTypes | 跟进类型 | array | false | 110: "联系法院",120: "联系被告",130: "法院回联",140: "被告回联",150: "立案平台",160: "法院消息",170: "邮寄",180: "缴费",185: "开庭",188: "履行",190: "法律文书",200: "其他",6: "系统录入", |
+| lawyerIds | 律师id | array | false | |
+| lawyerAccountIds | 提交律师账号 | array | false | |
+| fromLawyerIds | 交接律师id | array | false | |
+| batchIds | 批次模板id | array | false | |
+| clientIds | 案源方ID | array | false | |
+| spvIds | 原告id | array | false | |
+| stateIds | 案件系统自身状态 | array | false | |
+| sueTplIds | 资金模板结构id | array | false | |
+| submitStates | 提交立案状态 | array | false | |
+| platformStates | 立案平台状态 | array | false | |
+| courtIds | 法院id | array | false | |
+| followStartTime | 跟进时间-开始 | string | false | |
+| followEndTime | 跟进时间-结束 | string | false | |
+| rpaPlatformUpdateStartTime | 立案平台更新时间-开始 | string | false | |
+| rpaPlatformUpdateEndTime | 立案平台更新时间-结束 | string | false | |
+| categories | 标签类别 | array | false | 立案情况 案件状态 还款方式 |
+| labelKeys | 标签名 | array | false | |
+| labelValues | 标签值 | array | false | |
+| provinces | 法院省份 | array | false | |
+| areaCodes | 法院城市区号 | array | false | |
+| caseIds | 案件id | array | false | |
+| repayIntentIndex | 是否高潜 | string | false | 是/否 |
+| sortProp | 排序字段 | string | false | |
+| sortOrder | 升序/降序 | string | false | | | string |false||
+
+***请求示例:***
+> http://localhost:3000/prod-api/api/v1/case/main/listCases?pageNum=1&pageSize=10&lawyerIds=42&lawyerIds=30&sortProp=lastFollowTime&lawyerAccountIds=9&provinces=%E9%99%95%E8%A5%BF%E7%9C%81&areaCodes=0910&keywords=&eventRecordMethod=0
+
+***响应参数:***
+
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:-------------------------|:-----------|:-------|:------|:-------------------------------------|
+| data | 数据 | object | true | |
+| list | 数据列表 | array | true | |
+| id | id | int | true | |
+| lawyerId | 办案律师id | int | true | |
+| lawyer | 办案律师 | string | true | |
+| batchId | 批次号 | int | true | |
+| opsBatchName | 委案批次 | string | true | |
+| client | 案源方 | string | true | |
+| spvId | 原告id | string | true | |
+| spvName | 原告公司 | string | true | |
+| sueTplId | 诉讼模板id | string | true | |
+| sueTpl | 诉讼模板 | string | true | |
+| repayIntentIndex | 高潜客户指数 | string | false | |
+| courtShortName | 法院名称 | string | true | |
+| ccProjectAlias | 法院预计名称 | string | true | |
+| areaCode | 地区code | string | true | |
+| areaCodeFullname | 地区名称 | string | true | |
+| assetCount | 起诉的资产笔数 | int | false | |
+| borrowerName | 被告姓名 | string | true | |
+| idCardNumber | 被告身份证号 | string | true | |
+| sex | 性别 | string | false | |
+| birthDate | 生日 | date | false | |
+| ethnicity | 种族 | string | false | |
+| province | 被告住址省份 | string | false | |
+| city | 被告住址城市 | string | false | |
+| county | 被告住址区县 | string | false | |
+| submitLawyerName | 提交律师名称 | string | true | |
+| submitSpvTel | 提交原告电话 | string | false | |
+| submitLawyerTel | 提交律师电话 | string | false | |
+| state | 案件状态 | string | true | |
+| submitState | 案件提交状态 | string | true | |
+| rpaCaseId | 提交立案的ID | string | false | |
+| platformState | 立案平台案件状态 | string | false | |
+| caseNumbersInfo | 案号 | string | false | |
+| lastFollowTime | 最后跟进时间 | date | false | |
+| followRecords | 办案日志 | array | true | |
+| smsEntranceBOs | 短信信息 | array | false | |
+| effectiveActions | 案件跟进日志 | array | false | |
+| labels | 案件标签 | object | false | |
+| todoNotes | 待办笔记 | string | false | |
+| mailRequirements | 邮寄要求 | string | false | |
+| mailInfo | 邮寄信息 | string | false | |
+| remarks | 备注 | string | false | |
+| printSubmissionCount | 打印提交次数 | int | false | |
+| lastPrintSubmissionTime | 最近一次打印提交时间 | date | false | |
+| sueDate | 起诉日期 | date | false | |
+| overdueBaseAmount | 诉讼本金基数 | double | false | 用于计算诉讼利息的诉讼本金基数(未代偿即为剩余未还本金,否则为代偿总额) |
+| overdueInterestStartDate | 逾期利息起算日期 | date | false | (通常为最后一笔代偿日期的次日) |
+| overdueDays | 逾期天数 | int | false | (逾期利息起算日期至起诉日期) |
+| overdueInterestRate | 逾期利息年利率 | double | false | |
+| overdueInterestAmount | 逾期利息 | double | false | (代偿本金 x 逾期利息年利率 x 逾期天数/360) |
+| lawyerFeeAmount | 律师费 | double | false | |
+| travelFeeAmount | 差旅费 | double | false | |
+| sueDebtTotalAmount | 债务总额 | double | false | (代偿总额 + 逾期利息) |
+| sueClaimTotalAmount | 诉讼请求总额 | double | false | (债务总额 + 律师费 + 差旅费) |
+| total | 页数 | int | false | |
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:------------------|:--------|:-------|:-----|:------------------------------------------------------------|
+| followRecords | 数据列表 | array | true | |
+| id | id | int | true | |
+| caseId | 案件id | int | true | |
+| followTime | 跟踪时间 | date | true | |
+| deleteTime | 删除时间 | date | false | |
+| eventType | 信息来源 | int | true | 1:主动联系法院; 2:法院回联; 3:法院短信通知; 4:律师平台反馈; 5:执行操作; 6:系统录入; 7:其他' |
+| content | 内容 | String | true | |
+| readTime | 读取时间 | date | true | |
+| lsptMessageId | | string | true | |
+| isCreatedBySystem | 是否管理员创建 | Byte | false | |
+| createUserId | 创建人id | int | false | |
+| createUserName | 创建人名称 | string | false | |
+| infoId | 信息ID | int | false | |
+| infoSource | 信息来源 | string | false | |
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:---------------|:-----|:------|:-----|:---|
+| smsEntranceBOs | 数据列表 | array | true | |
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:-----------------|:-----|:------|:-----|:---|
+| effectiveActions | 数据列表 | array | true | |
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:-------|:-----|:------|:-----|:---|
+| labels | 数据列表 | array | true | |
+
+
+***响应示例:***
+
+
+```json
+{
+ "code": "00000",
+ "msg": "OK",
+ "data": {
+ "list": [
+ {
+ "id": 22271,
+ "lawyerId": 42,
+ "lawyer": "龙亮平",
+ "batchId": null,
+ "opsBatchName": "洋钱罐第3批-240406",
+ "client": "洋钱罐",
+ "spvId": null,
+ "spvName": "武汉红色森林商务咨询有限公司",
+ "sueTplId": null,
+ "sueTpl": "洋钱罐3全国第3批-20240406",
+ "repayIntentIndex": null,
+ "courtShortName": "礼泉县人民法院",
+ "ccProjectAlias": "洋钱罐第二批",
+ "areaCode": "0910",
+ "areaCodeFullname": "陕西省咸阳市",
+ "assetCount": 1,
+ "borrowerName": "张文鹏",
+ "idCardNumber": "610425199601092814",
+ "sex": "男",
+ "birthDate": "1996-01-09",
+ "ethnicity": "汉",
+ "province": "陕西省",
+ "city": "咸阳市",
+ "county": "礼泉县",
+ "submitLawyerName": null,
+ "submitSpvTel": null,
+ "submitLawyerTel": null,
+ "state": "审查中",
+ "submitState": "已提交",
+ "rpaCaseId": "24500",
+ "platformState": "审查不通过",
+ "caseNumbersInfo": null,
+ "lastFollowTime": "2024-05-17 17:55:02",
+ "smsEntranceBOs": [],
+ "effectiveActions": [],
+ "labels": {},
+ "todoNotes": null,
+ "mailRequirements": null,
+ "mailInfo": null,
+ "remarks": null,
+ "printSubmissionCount": null,
+ "lastPrintSubmissionTime": null,
+ "sueDate": "2024-04-06",
+ "overdueBaseAmount": null,
+ "overdueInterestStartDate": null,
+ "overdueDays": null,
+ "overdueInterestRate": null,
+ "overdueInterestAmount": null,
+ "lawyerFeeAmount": null,
+ "travelFeeAmount": null,
+ "sueDebtTotalAmount": 6861.47,
+ "sueClaimTotalAmount": 9361.47,
+ "followRecords": [
+ {
+ "createTime": "2024-05-17 17:56:38",
+ "updateTime": "2024-05-17 17:56:38",
+ "id": 324147,
+ "caseId": 22271,
+ "followTime": "2024-05-17 17:55:02",
+ "deleteTime": null,
+ "eventType": 130,
+ "content": "18710369012先转诉前联调。",
+ "readTime": "2024-05-17 17:56:38",
+ "lsptMessageId": null,
+ "isCreatedBySystem": 0,
+ "createUserId": 42,
+ "createUserName": "龙亮平",
+ "infoId": null,
+ "infoSource": null
+ }
+ ]
+ }
+ ]
+ }
+}
+```
+
+### 通过案件ID查询案件
+
+***接口地址:***
+> `/{id}`
+
+***请求方式:*** `GET`
+
+***接口描述:*** --
+
+***请求参数:***
+
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:-------------|:-----|:-------|:------|:---|
+| id | 案件id | int | true | |
+
+***请求示例:***
+> http://localhost:3000/prod-api/api/v1/case/main/184515
+
+***响应参数:***
+> 同案件列表查询接口请求参数一致
+
+
+***响应示例:***
+
+
+```json
+{
+ "code": "00000",
+ "msg": "OK",
+ "data": {
+ ...
+ }
+}
+```
+
+### 批量退案
+
+***接口地址:***
+> `/addBatchOpsBackCase`
+
+***请求方式:*** `POST`
+
+***接口描述:*** --
+
+***请求参数:***
+
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:-------------|:-----|:-------|:------|:---|
+| caseIds | 案件id | array | true | |
+| type | 退案类型 | string | true | |
+| remark | 备注 | string | false | | |
+| sendbackDate | 退案时间 | array | true | |
+
+**请求示例:**
+```json
+{
+ "caseIds": [1,2,3,4,5],
+ "type": "退案",
+ "remark": "xxxx",
+ "sendbackDate": "2024-06-13"
+}
+```
+
+***响应参数:***
+
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:-----|:---|:-------|:-----|:---|
+| data | | object | true | |
+
+
+
+***响应示例:***
+
+
+```json
+{
+ "code": "00000",
+ "msg": "OK",
+ "data": {
+
+ }
+}
+```
+
+******
+
+
+## 获取案件信息相关下拉选择数据源API
+***请求前缀***
+> /api/v1/case/misc
+
+
+### 获取原告列表
+
+***接口地址:***
+> `/listSpvs`
+
+***请求方式:*** `GET`
+
+***接口描述:*** --
+
+***请求参数:***
+> 同案件列表查询接口请求参数一致
+
+***响应参数:***
+
+
+| 参数名称 | 说明 | 参数类型 | 必填 | 备注 |
+|:------|:------|:-------|:-----|:---|
+| data | | array | true | |
+| id | key | int | true | |
+| name | value | string | true | |
+| alias | 别名 | string | true | |
+| count | 数量 | int | true | |
+
+***响应示例:***
+
+
+```json
+{
+ "code": "00000",
+ "msg": "OK",
+ "data": [
+ {
+ "id": 3,
+ "name": "xxxx",
+ "alias": null,
+ "count": 14996
+ }
+ ]
+}
+```
+******
\ No newline at end of file
diff --git a/index.html b/index.html
index 3dcc439a69d7e9bad60481eee2b5ae2c803a4bc4..d3da7dc188fb8c1283412dcf9a42c4594ba2e5a8 100644
--- a/index.html
+++ b/index.html
@@ -4,12 +4,9 @@
-
-
- vue3-element-admin
+
+
+ 广东云云律师事务所
@@ -62,7 +59,6 @@
.mesh-loader > div .circle:last-child {
animation-delay: 0s;
- animation-delay: 0s;
}
.mesh-loader > div {
@@ -73,65 +69,48 @@
.mesh-loader > div:last-child {
transform: rotate(90deg);
- transform: rotate(90deg);
}
@keyframes mesh {
0% {
- transform: rotate(0);
transform: rotate(0);
transform-origin: 50% -100%;
- transform-origin: 50% -100%;
}
50% {
- transform: rotate(360deg);
transform: rotate(360deg);
transform-origin: 50% -100%;
- transform-origin: 50% -100%;
}
50.00001% {
- transform: rotate(0deg);
transform: rotate(0deg);
transform-origin: 50% 200%;
- transform-origin: 50% 200%;
}
100% {
- transform: rotate(360deg);
transform: rotate(360deg);
transform-origin: 50% 200%;
- transform-origin: 50% 200%;
}
}
@keyframes mesh {
0% {
transform: rotate(0);
- transform: rotate(0);
- transform-origin: 50% -100%;
transform-origin: 50% -100%;
}
50% {
transform: rotate(360deg);
- transform: rotate(360deg);
- transform-origin: 50% -100%;
transform-origin: 50% -100%;
}
50.00001% {
transform: rotate(0deg);
- transform: rotate(0deg);
- transform-origin: 50% 200%;
transform-origin: 50% 200%;
}
100% {
transform: rotate(360deg);
- transform: rotate(360deg);
- transform-origin: 50% 200%;
transform-origin: 50% 200%;
}
}
diff --git a/mock/article.ts b/mock/article.ts
deleted file mode 100644
index 8563e6edebe094c9f075bae70bf4b37b1c70091a..0000000000000000000000000000000000000000
--- a/mock/article.ts
+++ /dev/null
@@ -1,168 +0,0 @@
-import { MockMethod } from "vite-plugin-mock";
-
-const article_list: any = [];
-const count = 100;
-
-for (let i = 0; i < count; i++) {
- article_list.push({
- id: i,
- timestamp: new Date().getTime(),
- author: `Author ${i}`,
- reviewer: `reviewer ${i}`,
- title: `Title ${i}`,
- importance: Math.floor(Math.random() * 3) + 1,
- type: ["CN", "US", "JP", "EU"][Math.floor(Math.random() * 4)],
- status: ["published", "draft"][Math.floor(Math.random() * 2)],
- display_time: new Date().toISOString(),
- pageviews: Math.floor(Math.random() * (5000 - 300)) + 300,
- remark: `remark ${i}`,
- });
-}
-
-export default [
- {
- url: "/api/v1/article/list",
- timeout: 200,
- method: "get",
- response: ({ query }) => {
- const { importance, type, title, page = 1, limit = 10, sort } = query;
- let mock_list = article_list.filter((item: any) => {
- if (importance && item.importance !== +importance) return false;
- if (type && item.type !== type) return false;
- if (title && item.title.indexOf(title) < 0) return false;
- if (item.status === "deleted") return false;
- return true;
- });
- if (sort === "-id") {
- mock_list = mock_list.reverse();
- }
- const page_list = mock_list.filter(
- (item: any, index: number) =>
- index < limit * page && index >= limit * (page - 1)
- );
-
- return {
- code: "00000",
- data: { total: mock_list.length, page: page, items: page_list },
- msg: "一切ok",
- };
- },
- },
- {
- url: "/api/v1/article/detail",
- timeout: 200,
- method: "get",
- response: ({ query }) => {
- const { id } = query;
- for (const article of article_list) {
- if (article.id === +id) {
- return {
- code: "00000",
- data: article,
- msg: "一切ok",
- };
- }
- }
- },
- },
- {
- url: "/api/v1/article/pv",
- timeout: 200,
- method: "get",
- response: ({ query }) => {
- const { id } = query;
- for (const article of article_list) {
- if (article.id === +id) {
- return {
- code: "00000",
- data: {
- pv: article.pageviews,
- pvData: [
- { key: "PC", pv: 1024 },
- { key: "mobile", pv: 1024 },
- { key: "ios", pv: 1024 },
- { key: "android", pv: 1024 },
- ],
- },
- msg: "一切ok",
- };
- }
- }
- },
- },
- {
- url: "/api/v1/article/update",
- timeout: 200,
- method: "post",
- response: ({ body }) => {
- const { id, ...updatedFields } = body;
- // 查找要更新的文章
- const articleToUpdate = article_list.find(
- (article: any) => article.id === id
- );
-
- // 如果找到了要更新的文章
- if (articleToUpdate) {
- // 使用 Object.assign 方法更新文章
- Object.assign(articleToUpdate, updatedFields);
- return {
- code: "00000",
- data: {
- article: articleToUpdate,
- },
- msg: "一切ok",
- };
- } else {
- console.error(`Article with id ${id} not found.`);
- }
- },
- },
- {
- url: "/api/v1/article/create",
- timeout: 200,
- method: "post",
- response: ({ body }) => {
- const { title, author, importance, type, status, remark, timestamp } =
- body;
- // article_list最大的id值;
- const maxId = article_list.reduce((maxId: number, article: any) => {
- return Math.max(maxId, article.id);
- }, -1);
- const article = {
- id: maxId + 1,
- timestamp,
- author,
- reviewer: `reviewer ${maxId + 1}`,
- title,
- importance,
- type,
- status,
- display_time: new Date(timestamp).toISOString(),
- pageviews: Math.floor(Math.random() * (5000 - 300)) + 300,
- remark,
- };
- article_list.push(article);
- return {
- code: "00000",
- data: {
- article,
- },
- msg: "一切ok",
- };
- },
- },
- {
- url: "/api/v1/article/delete",
- timeout: 200,
- method: "post",
- response: ({ body }) => {
- const { id } = body;
- const index = article_list.findIndex((article: any) => article.id === id);
- article_list.splice(index, 1);
- return {
- code: "00000",
- msg: "一切ok",
- };
- },
- },
-] as MockMethod[];
diff --git a/mock/auth.mock.ts b/mock/auth.mock.ts
new file mode 100644
index 0000000000000000000000000000000000000000..73a7359d7e83406b1850e1e6b7ca6076ed0dc06f
--- /dev/null
+++ b/mock/auth.mock.ts
@@ -0,0 +1,48 @@
+import path from "path";
+import { createDefineMock } from "vite-plugin-mock-dev-server";
+
+const defineMock = createDefineMock((mock) => {
+ mock.url = path.join(import.meta.env.VITE_APP_BASE_API, mock.url); // 路径会拼接为: /dev-api + url
+});
+
+export default defineMock([
+ {
+ url: "/api/v1/auth/captcha",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: {
+ captchaKey: "534b8ef2b0a24121bec76391ddd159f9",
+ captchaBase64:
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAkCAIAAADNSmkJAAAFKUlEQVR4Xu2ZXUwcVRiGV70wMWo08V5NvPXCrDbFaGpMaZW2hqQxaoiJTRsaMBCNSYtpa2JTKiFSelFa+Q/QZcMWqEhBlh+htbEpZhMrBQrlJ0hBywLLyrJ0WZbje3bqOvPNLHPWrDvdOE9ONmfe78zkzMs335wzWJhJQrBQweS/wTQ6QWgYHdoIOcecOe05O+t2WkutO+p2ZF3Ksg/YV9ZW6FATYajR3nveg60H9327r3O8c35lHgp+r05dPdJzBL73TPSQ8SaCKIxGLsPlop+K0JHrEkPuoT31e5qGmmjARACF0agYyGVNlyVm/pzZXrN9fHGcBkz0UBid+31u93i3XFFT80vN8cvHqWqih8Lo1NpUqS5vwh3vnd223VQ10UNh9NbyrcFQUK6oCawHUipSqGqiB83oBf+CXFGDMp1mS6OqiR4Ko7FexkpOrqhpHGw82nOUqiZ6KIzGrkRuorW0dJMmOy+hOCfYGzb2RBFv6HRO0gEJw/U7y+pgL1bwmTxexN6sZ31TdEwEhdG+gA+7EqyXpUO1uZH20cWL8hMTRt1N9tBXzCJrOIRoCPJpSO2RAp4HmtCdIfZ+2JWgEBN9LbR28seTGU0Zue1tMLp+YIAMSADzfvbkKX4/eb28j4YODiGin3heqmIlLja5hAUCu+nmGY3JWKvpMAlqNGgebsauBOvlqSX+JEx7p7EbTLen53XlzfmWUioqXikrc68Y8N2juJ/fyVsNChGHEE//rBANYWaZz+TRQqpLaBgNsPfDrgSpbS21YtV87IdjrlkX9JZbt5DOma2t9ITo5F+5glN22WwL/n+yDv00mw06orKxOqQ5+J04hhViwzAXETIcJDVm8uxZqktoGx2Nj9t43Wgaul/ERQiGQvtbWnDWgZYW9CXlQFjZ/7ciyHNn+Z2MexTimIeLz59TiIln0M1e+IbPpOAaDUnEYPTi6iqKxpbycs/qKo1tCslfKcffPn9enuMiPPY1vxO/ckeFQ4h46cdGqUWoidE/y54q5tPY5WDrGzQqIXot4BgchEE57e00IMCw2/1qZSVO/7SjA78o9INzcxsbrL+fnTnDDh9mmZn8F30oG1Hm+nABv5mQMopDS/h1HxtqTzWbABMe9sxpPoe9zezeOo1GELqWhPS8t46M0IAYHbdvR1aHbaOjbjfLz2eFhez6dba4yAfgF30o0BFVE8+Mjh/wFxPI+I5mAEHU6Ls+38vhTFwOBGhMDF8gkFpbC5ffsdv/uBs6dIj19dExEtARVXv9YNbop8NFY3aZ6gRRo+tu3IBHnzmdNCBMXldXJKPfL74WzWUJRE+coDUknqsOdZXQbAJYwluVTbOZI3Qt8GFzMwxyjo3RgBiN4fr+elXVpZGRLWXl6PdOTtJBSlBDUK/lnIrjOlrtqWYTQDJaF6FrTXu9sOa1ysrVoM5HVE1GFxZQcyJ/p+xzv6K/rbr6N6+XDpUBl0tKFIrbz78qWB6YnWFMCBld4XLBms+7df75ook/GNzb0GCV7U1Qfz9p64TyQWNjYD3qe9rj4SMJtQP3MyjSDPzWIRHPjH7X4YAvfXoPuyZf9Pbi3PcuXIh4mp3NllYC6XY79C+jl2o8PBipxjnBttn4MgMNnWgfcRJGPI2OL8hTj3LloIlmRicvBhiNykvecpqoa3RSY4DRcLAwyicuOepVR1JjgNFYHWONHL04czTX0UmNAUYD7Pr+xc4wqTHGaBb2OtZvHUmNYUazcA2J6etdUmOk0f8rTKMTxF91RG0D1SwYGwAAAABJRU5ErkJggg==",
+ },
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/auth/login",
+ method: ["POST"],
+ body: {
+ code: "00000",
+ data: {
+ accessToken:
+ "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImp0aSI6IjE2YWJkNTlkOTAxNzQwZDliYmI3ZjczODBhZDkyNzNhIiwidXNlcklkIjoyLCJ1c2VybmFtZSI6ImFkbWluIiwiZGVwdElkIjoxLCJkYXRhU2NvcGUiOjEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwiZXhwIjoxNjkxMTAzMzgyfQ.P4cuIfmPepl3HuguhMS7NXn5a7IUPpsLbmtA_rHOhHk",
+ tokenType: "Bearer",
+ refreshToken: null,
+ expires: null,
+ },
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/auth/logout",
+ method: ["DELETE"],
+ body: {
+ code: "00000",
+ data: {},
+ msg: "string",
+ },
+ },
+]);
diff --git a/mock/case.mock.ts b/mock/case.mock.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2ea76e88782a0cfc0d8cab71cbce3bcd83eaad7f
--- /dev/null
+++ b/mock/case.mock.ts
@@ -0,0 +1,121 @@
+import path from "path";
+import { createDefineMock } from "vite-plugin-mock-dev-server";
+
+const defineMock = createDefineMock((mock) => {
+ mock.url = path.join(import.meta.env.VITE_APP_BASE_API, mock.url); // 路径会拼接为: /dev-api + url
+});
+
+export default defineMock([
+ {
+ url: "/api/v1/case/llm/action/update",
+ method: ["GET", "POST"],
+ body: { code: "00000", data: 11380, msg: "一切ok" },
+ },
+ {
+ url: "/api/v1/case/push/l1ist",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: {
+ list: [
+ {
+ id: 1043,
+ userId: 9,
+ pushTime: "2024-04-05 20:51:16",
+ content:
+ "24年4月5日08:28贵公司帐户尾号0231转入人民币650.00[互联汇入24040500071478]杜晶,尾号6530杜晶【浦发银行】",
+ createTime: "2024-04-05 23:13:35",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "杜晶",
+ },
+ {
+ id: 1044,
+ userId: 58,
+ pushTime: "2024-04-05 20:51:16",
+ content:
+ "24年4月5日10:43贵公司帐户尾号0231转入人民币1,250.00[互联汇入24040500167257]手机银行转账,尾号1867李波【浦发银行】",
+ createTime: "2024-04-05 23:14:46",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "李波",
+ },
+ {
+ id: 1040,
+ userId: 46,
+ pushTime: "2024-04-04 20:51:16",
+ content:
+ "24年4月4日01:30贵公司帐户尾号0231转入人民币490.00[互联汇入24040400021606],尾号4267张盼盼【浦发银行】",
+ createTime: "2024-04-04 21:13:15",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "张盼盼",
+ },
+ {
+ id: 1041,
+ userId: 40,
+ pushTime: "2024-04-04 20:51:16",
+ content:
+ "24年4月4日10:50贵公司帐户尾号0231转入人民币4,141.58[互联汇入24040400168962]还款,尾号8072马翔【浦发银行】",
+ createTime: "2024-04-04 21:14:04",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "马翔",
+ },
+ {
+ id: 1029,
+ userId: 42,
+ pushTime: "2024-04-03 20:51:16",
+ content: null,
+ createTime: "2024-04-03 20:51:16",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "蒋桂勇",
+ },
+ {
+ id: 1030,
+ userId: 76,
+ pushTime: "2024-04-03 20:51:16",
+ content: null,
+ createTime: "2024-04-03 20:51:49",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "吴勇庆",
+ },
+ {
+ id: 1031,
+ userId: 11,
+ pushTime: "2024-04-03 20:51:16",
+ content: null,
+ createTime: "2024-04-03 20:52:10",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "房金泉",
+ },
+ {
+ id: 1032,
+ userId: 25,
+ pushTime: "2024-04-03 20:51:16",
+ content: null,
+ createTime: "2024-04-03 20:52:30",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "唐俊",
+ },
+ {
+ id: 1033,
+ userId: 14,
+ pushTime: "2024-04-03 20:51:16",
+ content: null,
+ createTime: "2024-04-03 20:52:46",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "李宇",
+ },
+ {
+ id: 1034,
+ userId: 36,
+ pushTime: "2024-04-03 20:51:16",
+ content: null,
+ createTime: "2024-04-03 20:53:07",
+ updateTime: "2024-04-06T18:27:25",
+ userName: "施源",
+ },
+ ],
+ total: 530,
+ },
+ msg: "一切ok",
+ },
+ },
+]);
diff --git a/mock/dept.mock.ts b/mock/dept.mock.ts
new file mode 100644
index 0000000000000000000000000000000000000000..46e628d87754d4d045644d8743a9bcde78868fff
--- /dev/null
+++ b/mock/dept.mock.ts
@@ -0,0 +1,75 @@
+import path from "path";
+import { createDefineMock } from "vite-plugin-mock-dev-server";
+
+const defineMock = createDefineMock((mock) => {
+ mock.url = path.join(import.meta.env.VITE_APP_BASE_API, mock.url); // 路径会拼接为: /dev-api + url
+});
+
+export default defineMock([
+ {
+ url: "/api/v1/dept/options",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: [
+ {
+ value: 1,
+ label: "有来技术",
+ children: [
+ {
+ value: 2,
+ label: "研发部门",
+ },
+ {
+ value: 3,
+ label: "测试部门",
+ },
+ ],
+ },
+ ],
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/dept",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: [
+ {
+ id: 1,
+ parentId: 0,
+ name: "有来技术",
+ sort: 1,
+ status: 1,
+ children: [
+ {
+ id: 2,
+ parentId: 1,
+ name: "研发部门",
+ sort: 1,
+ status: 1,
+ children: [],
+ createTime: null,
+ updateTime: "2022-04-19 12:46",
+ },
+ {
+ id: 3,
+ parentId: 1,
+ name: "测试部门",
+ sort: 1,
+ status: 1,
+ children: [],
+ createTime: null,
+ updateTime: "2022-04-19 12:46",
+ },
+ ],
+ createTime: null,
+ updateTime: null,
+ },
+ ],
+ msg: "一切ok",
+ },
+ },
+]);
diff --git a/mock/dept.ts b/mock/dept.ts
deleted file mode 100644
index 91746f4f2d79827111cffafb5637c29f93d04658..0000000000000000000000000000000000000000
--- a/mock/dept.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { MockMethod } from "vite-plugin-mock";
-
-export default [
- {
- url: "/api/v1/dept/options",
- method: "get",
- response: () => {
- return {
- code: "00000",
- data: [
- {
- value: 1,
- label: "有来技术",
- children: [
- {
- value: 2,
- label: "研发部门",
- },
- {
- value: 3,
- label: "测试部门",
- },
- ],
- },
- ],
- msg: "一切ok",
- };
- },
- },
-] as MockMethod[];
diff --git a/mock/dict.mock.ts b/mock/dict.mock.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9f4a17de44c5e8e33a16a0586bca0be950727865
--- /dev/null
+++ b/mock/dict.mock.ts
@@ -0,0 +1,99 @@
+import path from "path";
+import { createDefineMock } from "vite-plugin-mock-dev-server";
+
+const defineMock = createDefineMock((mock) => {
+ mock.url = path.join(import.meta.env.VITE_APP_BASE_API, mock.url); // 路径会拼接为: /dev-api + url
+});
+
+export default defineMock([
+ {
+ url: "/api/v1/dict/:code/options",
+ method: ["GET"],
+ body: ({ params }) => {
+ const typeCode = params.code;
+
+ let list = null;
+
+ if (typeCode == "gender") {
+ list = [
+ {
+ value: "1",
+ label: "男",
+ },
+ {
+ value: "2",
+ label: "女",
+ },
+ {
+ value: "0",
+ label: "未知",
+ },
+ ];
+ }
+
+ return {
+ code: "00000",
+ data: list,
+ msg: "一切ok",
+ };
+ },
+ },
+
+ {
+ url: "/api/v1/dict/types/page",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: {
+ list: [
+ {
+ id: 1,
+ name: "性别",
+ code: "gender",
+ status: 1,
+ },
+ {
+ id: 2,
+ name: "状态",
+ code: "status",
+ status: 1,
+ },
+ ],
+ total: 2,
+ },
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/dict/page",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: {
+ list: [
+ {
+ id: 1,
+ name: "男",
+ value: "1",
+ status: 1,
+ },
+ {
+ id: 2,
+ name: "女",
+ value: "2",
+ status: 1,
+ },
+ {
+ id: 3,
+ name: "未知",
+ value: "0",
+ status: 1,
+ },
+ ],
+ total: 3,
+ },
+ msg: "一切ok",
+ },
+ },
+]);
diff --git a/mock/dict.ts b/mock/dict.ts
deleted file mode 100644
index 4ee38c38d13e1db70b2fa765341e28251589bebc..0000000000000000000000000000000000000000
--- a/mock/dict.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { MockMethod } from "vite-plugin-mock";
-
-export default [
- {
- url: "/api/v1/dict/:code/options",
- method: "get",
- response: ({ url }) => {
- const typeCode = url.match(/\/api\/v1\/dict\/(\w+)\/options/)[1];
-
- let list = null;
-
- if (typeCode == "gender") {
- list = [
- {
- value: "1",
- label: "男",
- },
- {
- value: "2",
- label: "女",
- },
- {
- value: "0",
- label: "未知",
- },
- ];
- }
-
- return {
- code: "00000",
- data: list,
- msg: "一切ok",
- };
- },
- },
-] as MockMethod[];
diff --git a/mock/menu.mock.ts b/mock/menu.mock.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b26f1fc29b6adb9f184e560004ec051c6676ae2b
--- /dev/null
+++ b/mock/menu.mock.ts
@@ -0,0 +1,1573 @@
+import path from "path";
+import { createDefineMock } from "vite-plugin-mock-dev-server";
+
+const defineMock = createDefineMock((mock) => {
+ mock.url = path.join(import.meta.env.VITE_APP_BASE_API, mock.url); // 路径会拼接为: /dev-api + url
+});
+
+export default defineMock([
+ {
+ url: "/api/v1/menus/routes", // 路径会拼接为: /dev-api/api/v1/menus/routes
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: [
+ {
+ path: "/case",
+ component: "Layout",
+ name: "/case",
+ meta: {
+ title: "案件管理",
+ icon: "dict",
+ hidden: false,
+ roles: [
+ "ADMIN_ASSISTANT",
+ "CASE_SUBMIT",
+ "WORKER",
+ "ADMIN",
+ "REPAY_CHECKER",
+ "DATA_INPUT",
+ "CASE_ADMIN",
+ "CASE_SYSTEM_ADMIN",
+ "CASE_LABEL",
+ ],
+ externalUrl: null,
+ alwaysShow: true,
+ },
+ children: [
+ {
+ path: "main",
+ component: "case/main/index",
+ name: "Main",
+ meta: {
+ title: "案件列表",
+ icon: "document",
+ hidden: false,
+ roles: [
+ "ADMIN_ASSISTANT",
+ "CASE_SUBMIT",
+ "WORKER",
+ "ADMIN",
+ "CASE_ADMIN",
+ "CASE_SYSTEM_ADMIN",
+ "CASE_LABEL",
+ ],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "execution-input",
+ component: "bi/index",
+ name: "ExecutionInput",
+ meta: {
+ title: "执行录入",
+ icon: "peoples",
+ hidden: false,
+ roles: ["ADMIN", "DATA_INPUT", "CASE_SYSTEM_ADMIN"],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dataform/view.htm?id=b96b8773-b1db-464a-aee1-a94dee0a5a19&accessToken=5d531f6b925c6879585ddfdbd1443244",
+ },
+ },
+ {
+ path: "fulfill-entry",
+ component: "case/fulfill/fulfill",
+ name: "FulfillEntry",
+ meta: {
+ title: "现金回款录入",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "CASE_SYSTEM_ADMIN",
+ "REPAY_CHECKER",
+ "ADMIN",
+ "DATA_INPUT",
+ ],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "push",
+ component: "case/push/index",
+ name: "Push",
+ meta: {
+ title: "沟通记录",
+ icon: "edit",
+ hidden: false,
+ roles: ["CASE_SYSTEM_ADMIN", "ADMIN", "CASE_ADMIN"],
+ externalUrl: "",
+ keepAlive: true,
+ },
+ },
+ ],
+ },
+ {
+ path: "/call-center",
+ component: "Layout",
+ name: "/callCenter",
+ meta: {
+ title: "呼叫中心",
+ icon: "tree",
+ hidden: false,
+ roles: [
+ "CALL_CENTER_RECORDS",
+ "ADMIN_ASSISTANT",
+ "CALL_CENTER_ADMIN",
+ "CASE_SYSTEM_ADMIN",
+ "LAWYER",
+ "WORKER",
+ "ASSISTANT",
+ "ADMIN",
+ ],
+ externalUrl: null,
+ alwaysShow: true,
+ },
+ children: [
+ {
+ path: "route",
+ component: "call-center/route/index",
+ name: "Route",
+ meta: {
+ title: "路由配置",
+ icon: "user",
+ hidden: false,
+ roles: [
+ "ADMIN",
+ "ADMIN_ASSISTANT",
+ "CALL_CENTER_ADMIN",
+ "CASE_SYSTEM_ADMIN",
+ ],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "seat",
+ component: "call-center/seat/index",
+ name: "Seat",
+ meta: {
+ title: "坐席管理",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "ADMIN",
+ "ADMIN_ASSISTANT",
+ "CALL_CENTER_ADMIN",
+ "CASE_SYSTEM_ADMIN",
+ ],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "cdr",
+ component: "call-center/cdr/index",
+ name: "Cdr",
+ meta: {
+ title: "通话记录",
+ icon: "download",
+ hidden: false,
+ roles: [
+ "CALL_CENTER_RECORDS",
+ "ADMIN",
+ "LAWYER",
+ "ADMIN_ASSISTANT",
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ASSISTANT",
+ ],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ ],
+ },
+ {
+ path: "/bi",
+ component: "Layout",
+ name: "/bi",
+ meta: {
+ title: "数据报表",
+ icon: "table",
+ hidden: false,
+ roles: [
+ "CASE_ADMIN",
+ "CASE_SOURCE_FOLLOW",
+ "FULFILL_CHECKER",
+ "ADMIN",
+ "REPAY_CHECKER",
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "HR",
+ "DATA_ADMIN",
+ ],
+ externalUrl: null,
+ alwaysShow: true,
+ },
+ children: [
+ {
+ path: "followup/feedback",
+ component: "bi/index",
+ name: "Followup/feedback",
+ meta: {
+ title: "案件跟进 - 日清日结",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "DATA_ADMIN",
+ "CASE_ADMIN",
+ "ADMIN",
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ ],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=92f515b8-1fd9-4e08-af2c-c314ab8eefb7&accessToken=dab2963e1e415e5b78765c7694929dd2&dd_orientation=auto",
+ keepAlive: true,
+ },
+ },
+ {
+ path: "/sec",
+ component: "components/AppMain",
+ name: "/sec",
+ meta: {
+ title: "二级目录",
+ icon: "api",
+ hidden: false,
+ roles: ["ADMIN"],
+ externalUrl: null,
+ alwaysShow: true,
+ type: 2,
+ },
+ children: [
+ {
+ path: "followup/feedback",
+ component: "bi/index",
+ name: "Followup/feedback",
+ meta: {
+ title: "二级 - Page1",
+ icon: "edit",
+ hidden: false,
+ roles: ["ADMIN"],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "followup/follow",
+ component: "bi/index",
+ name: "Followup/follow",
+ meta: {
+ title: "二级 - Page2",
+ icon: "drag",
+ hidden: false,
+ roles: ["ADMIN"],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ ],
+ },
+ {
+ path: "followup/follow",
+ component: "bi/index",
+ name: "Followup/follow",
+ meta: {
+ title: "案件跟进 - 整体办案",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ "DATA_ADMIN",
+ "CASE_ADMIN",
+ ],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=3184821d-257f-4936-b78d-970571232840&accessToken=02e85cf27d75188aa7797721ee04b2f9&dd_orientation=auto",
+ keepAlive: true,
+ },
+ },
+ {
+ path: "fulfill",
+ component: "bi/index",
+ name: "Fulfill",
+ meta: {
+ title: "确权回款表",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ "DATA_ADMIN",
+ "CASE_ADMIN",
+ "FULFILL_CHECKER",
+ ],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=7e7ea663-abbe-46f7-bb2c-882c6cda37b4&accessToken=d208c704b568623950e5074d55be5993&dd_orientation=auto",
+ keepAlive: true,
+ },
+ },
+ {
+ path: "repay",
+ component: "bi/index",
+ name: "Repay",
+ meta: {
+ title: "现金回款表",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ "DATA_ADMIN",
+ "CASE_ADMIN",
+ "REPAY_CHECKER",
+ ],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=256c9aca-6156-424a-a05d-7f6e5499f50f&accessToken=b5bfedc80df2772c483d515d765df5ea&dd_orientation=auto",
+ keepAlive: true,
+ },
+ },
+ {
+ path: "lawyer_basic",
+ component: "bi/index",
+ name: "Lawyer_basic",
+ meta: {
+ title: "基础数据报表",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ "CASE_ADMIN",
+ "DATA_ADMIN",
+ ],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=55dbf075-7651-4316-9810-ca2f5ecd369c&accessToken=350bfe1c604e3085641723f0a4326a08&dd_orientation=auto",
+ },
+ },
+ {
+ path: "source",
+ component: "bi/dispatch/case-source",
+ name: "Source",
+ meta: {
+ title: "律师VS案源分布",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "HR",
+ "DATA_ADMIN",
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ "CASE_ADMIN",
+ ],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "lawyer-state",
+ component: "bi/dispatch/case-lawyer-state",
+ name: "LawyerState",
+ meta: {
+ title: "律师VS案件状态",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "CASE_ADMIN",
+ "HR",
+ "DATA_ADMIN",
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ ],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "state",
+ component: "bi/dispatch/case-state",
+ name: "State",
+ meta: {
+ title: "案源方VS案件状态",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "HR",
+ "CASE_SOURCE_FOLLOW",
+ "DATA_ADMIN",
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ "CASE_ADMIN",
+ ],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "fulfill-detail",
+ component: "bi/index",
+ name: "FulfillDetail",
+ meta: {
+ title: "履行明细",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ "FULFILL_CHECKER",
+ "CASE_SOURCE_FOLLOW",
+ ],
+ externalUrl:
+ "http://bi.aliyuncs.com/token3rd/dashboard/view/pc.htm?pageId=892a5bf6-be72-40f2-ab93-14111ea3b7b9&accessToken=e8df45c2f55cd3860410785be3464177&dd_orientation=auto",
+ keepAlive: true,
+ },
+ },
+ {
+ path: "detail",
+ component: "bi/index",
+ name: "Detail",
+ meta: {
+ title: "案件明细表",
+ icon: "table",
+ hidden: false,
+ roles: [
+ "CASE_ADMIN",
+ "CASE_SOURCE_FOLLOW",
+ "WORKER",
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ ],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=b93422d2-c7d2-4453-9161-4797102a5a52&accessToken=e433b0a8ee73c5f6782a6ffe00ceaf6d&dd_orientation=auto",
+ keepAlive: true,
+ },
+ },
+ {
+ path: "order-detail",
+ component: "bi/index",
+ name: "OrderDetail",
+ meta: {
+ title: "全量订单列表",
+ icon: "peoples",
+ hidden: false,
+ roles: [
+ "CASE_SYSTEM_ADMIN",
+ "ADMIN",
+ "WORKER",
+ "CASE_SOURCE_FOLLOW",
+ ],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=90d42a51-7efa-4dd5-b9ea-551ec5e9e26e&accessToken=4ce84011f17011737e2ace8af93a5988&dd_orientation=auto",
+ keepAlive: true,
+ },
+ },
+ ],
+ },
+ {
+ path: "/basic-data",
+ component: "Layout",
+ name: "/basicData",
+ meta: {
+ title: "基础数据报表",
+ icon: "monitor",
+ hidden: false,
+ roles: ["CASE_SYSTEM_ADMIN", "ADMIN", "WORKER", "DATA_INPUT"],
+ externalUrl: "",
+ alwaysShow: true,
+ },
+ children: [
+ {
+ path: "followup_reocrds",
+ component: "bi/index",
+ name: "Followup_reocrds",
+ meta: {
+ title: "办案日志",
+ icon: "peoples",
+ hidden: false,
+ roles: ["CASE_SYSTEM_ADMIN", "ADMIN"],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=e4c07415-34dd-473c-98d8-843d03b0dfbb&accessToken=340f59d851d58743b598afa2e625c12b&dd_orientation=auto",
+ },
+ },
+ {
+ path: "print",
+ component: "bi/index",
+ name: "Print",
+ meta: {
+ title: "打印邮寄表",
+ icon: "peoples",
+ hidden: false,
+ roles: ["WORKER", "CASE_SYSTEM_ADMIN", "ADMIN"],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=2e997dc5-06bc-4849-89dc-d5393de6dabb&accessToken=39827e33e1baf2bd56dbdb9c09e885d8&dd_orientation=auto",
+ },
+ },
+ {
+ path: "sms",
+ component: "bi/index",
+ name: "Sms",
+ meta: {
+ title: "短信数据",
+ icon: "peoples",
+ hidden: false,
+ roles: ["CASE_SYSTEM_ADMIN", "ADMIN"],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=32a7fee5-12fa-4baa-b788-5bcf03e69197&accessToken=e35610ef18c0956e073848efc0fc30d9&dd_orientation=auto",
+ keepAlive: true,
+ },
+ },
+ {
+ path: "execution",
+ component: "bi/index",
+ name: "Execution",
+ meta: {
+ title: "执行数据",
+ icon: "peoples",
+ hidden: false,
+ roles: ["DATA_INPUT", "CASE_SYSTEM_ADMIN", "ADMIN"],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=2baa485d-6f27-4ce9-80d8-e1740ba7a523&accessToken=44831b1f66df2d2eb55139697cb71a8d&dd_orientation=auto",
+ },
+ },
+ {
+ path: "fee",
+ component: "bi/index",
+ name: "Fee",
+ meta: {
+ title: "缴费数据",
+ icon: "peoples",
+ hidden: false,
+ roles: ["CASE_SYSTEM_ADMIN", "ADMIN"],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=8a3b43b3-154a-455c-8f84-807885023af1&accessToken=68b041c79751431d4ee5db6ebe278d7b&dd_orientation=auto",
+ },
+ },
+ {
+ path: "case_number",
+ component: "bi/index",
+ name: "Case_number",
+ meta: {
+ title: "案号数据",
+ icon: "peoples",
+ hidden: false,
+ roles: ["CASE_SYSTEM_ADMIN", "ADMIN"],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=75b232ec-0cc5-47d8-9a2f-52b3193c496a&accessToken=d3898401e39f841fb96ec90d33a21342&dd_orientation=auto",
+ },
+ },
+ {
+ path: "court",
+ component: "bi/index",
+ name: "Court",
+ meta: {
+ title: "开庭和滴滴律师数据",
+ icon: "peoples",
+ hidden: false,
+ roles: ["DATA_INPUT", "CASE_SYSTEM_ADMIN", "ADMIN"],
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=1f736da6-03ea-4b83-a49b-28c8644c0f43&accessToken=523e15a7267344ac2d67bed5ec6c76ed&dd_orientation=auto",
+ },
+ },
+ ],
+ },
+ {
+ path: "/system",
+ component: "Layout",
+ redirect: "/system/user",
+ name: "/system",
+ meta: {
+ title: "系统管理",
+ icon: "system",
+ hidden: false,
+ roles: ["ADMIN"],
+ externalUrl: null,
+ },
+ children: [
+ {
+ path: "user",
+ component: "system/user/index",
+ name: "User",
+ meta: {
+ title: "用户管理",
+ icon: "user",
+ hidden: false,
+ roles: ["ADMIN"],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "role",
+ component: "system/role/index",
+ name: "Role",
+ meta: {
+ title: "角色管理",
+ icon: "role",
+ hidden: false,
+ roles: ["ADMIN"],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "menu",
+ component: "system/menu/index",
+ name: "Menu",
+ meta: {
+ title: "菜单管理",
+ icon: "menu",
+ hidden: false,
+ roles: ["ADMIN"],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "dept",
+ component: "system/dept/index",
+ name: "Dept",
+ meta: {
+ title: "部门管理",
+ icon: "tree",
+ hidden: false,
+ roles: ["ADMIN"],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ {
+ path: "dict",
+ component: "system/dict/index",
+ name: "Dict",
+ meta: {
+ title: "字典管理",
+ icon: "dict",
+ hidden: false,
+ roles: ["ADMIN"],
+ externalUrl: null,
+ keepAlive: true,
+ },
+ },
+ ],
+ },
+ ],
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/menus", // 路径会拼接为: /dev-api/api/v1/menus/routes
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: [
+ {
+ id: 1,
+ parentId: 0,
+ name: "系统管理",
+ type: "CATALOG",
+ path: "/system",
+ component: "Layout",
+ sort: 1,
+ visible: 1,
+ icon: "system",
+ redirect: "/system/user",
+ perm: null,
+ children: [
+ {
+ id: 2,
+ parentId: 1,
+ name: "用户管理",
+ type: "MENU",
+ path: "user",
+ component: "system/user/index",
+ sort: 1,
+ visible: 1,
+ icon: "user",
+ redirect: null,
+ perm: null,
+ children: [
+ {
+ id: 31,
+ parentId: 2,
+ name: "用户新增",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: "sys:user:add",
+ children: [],
+ },
+ {
+ id: 32,
+ parentId: 2,
+ name: "用户编辑",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 2,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: "sys:user:edit",
+ children: [],
+ },
+ {
+ id: 33,
+ parentId: 2,
+ name: "用户删除",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 3,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: "sys:user:delete",
+ children: [],
+ },
+ {
+ id: 88,
+ parentId: 2,
+ name: "重置密码",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 4,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:user:reset_pwd",
+ children: [],
+ },
+ ],
+ },
+ {
+ id: 3,
+ parentId: 1,
+ name: "角色管理",
+ type: "MENU",
+ path: "role",
+ component: "system/role/index",
+ sort: 2,
+ visible: 1,
+ icon: "role",
+ redirect: null,
+ perm: null,
+ children: [
+ {
+ id: 70,
+ parentId: 3,
+ name: "角色新增",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:role:add",
+ children: [],
+ },
+ {
+ id: 71,
+ parentId: 3,
+ name: "角色编辑",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 2,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:role:edit",
+ children: [],
+ },
+ {
+ id: 72,
+ parentId: 3,
+ name: "角色删除",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 3,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:role:delete",
+ children: [],
+ },
+ ],
+ },
+ {
+ id: 4,
+ parentId: 1,
+ name: "菜单管理",
+ type: "MENU",
+ path: "menu",
+ component: "system/menu/index",
+ sort: 3,
+ visible: 1,
+ icon: "menu",
+ redirect: null,
+ perm: null,
+ children: [
+ {
+ id: 73,
+ parentId: 4,
+ name: "菜单新增",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:menu:add",
+ children: [],
+ },
+ {
+ id: 74,
+ parentId: 4,
+ name: "菜单编辑",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 3,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:menu:edit",
+ children: [],
+ },
+ {
+ id: 75,
+ parentId: 4,
+ name: "菜单删除",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 3,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:menu:delete",
+ children: [],
+ },
+ ],
+ },
+ {
+ id: 5,
+ parentId: 1,
+ name: "部门管理",
+ type: "MENU",
+ path: "dept",
+ component: "system/dept/index",
+ sort: 4,
+ visible: 1,
+ icon: "tree",
+ redirect: null,
+ perm: null,
+ children: [
+ {
+ id: 76,
+ parentId: 5,
+ name: "部门新增",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:dept:add",
+ children: [],
+ },
+ {
+ id: 77,
+ parentId: 5,
+ name: "部门编辑",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 2,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:dept:edit",
+ children: [],
+ },
+ {
+ id: 78,
+ parentId: 5,
+ name: "部门删除",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 3,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:dept:delete",
+ children: [],
+ },
+ ],
+ },
+ {
+ id: 6,
+ parentId: 1,
+ name: "字典管理",
+ type: "MENU",
+ path: "dict",
+ component: "system/dict/index",
+ sort: 5,
+ visible: 1,
+ icon: "dict",
+ redirect: null,
+ perm: null,
+ children: [
+ {
+ id: 79,
+ parentId: 6,
+ name: "字典类型新增",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:dict_type:add",
+ children: [],
+ },
+ {
+ id: 81,
+ parentId: 6,
+ name: "字典类型编辑",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 2,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:dict_type:edit",
+ children: [],
+ },
+ {
+ id: 84,
+ parentId: 6,
+ name: "字典类型删除",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 3,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:dict_type:delete",
+ children: [],
+ },
+ {
+ id: 85,
+ parentId: 6,
+ name: "字典数据新增",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 4,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:dict:add",
+ children: [],
+ },
+ {
+ id: 86,
+ parentId: 6,
+ name: "字典数据编辑",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 5,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:dict:edit",
+ children: [],
+ },
+ {
+ id: 87,
+ parentId: 6,
+ name: "字典数据删除",
+ type: "BUTTON",
+ path: "",
+ component: null,
+ sort: 6,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: "sys:dict:delete",
+ children: [],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ id: 115,
+ parentId: 0,
+ name: "数据报表",
+ type: "CATALOG",
+ path: "/bi",
+ component: "Layout",
+ sort: 3,
+ visible: 1,
+ icon: "table",
+ redirect: null,
+ perm: null,
+ children: [
+ {
+ id: 133,
+ parentId: 115,
+ name: "案件跟进 - 日清日结",
+ type: "MENU",
+ path: "followup/feedback",
+ component: "bi/dispatch/case-feedback",
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=92f515b8-1fd9-4e08-af2c-c314ab8eefb7&accessToken=dab2963e1e415e5b78765c7694929dd2&dd_orientation=auto",
+ sort: 1,
+ visible: 1,
+ icon: "peoples",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ {
+ id: 135,
+ parentId: 115,
+ name: "基础数据",
+ type: "CATALOG",
+ path: "basic",
+ component: "Layout",
+ sort: 1,
+ visible: 1,
+ icon: "dict",
+ redirect: null,
+ perm: null,
+ children: [
+ {
+ id: 136,
+ parentId: 135,
+ name: "基础数据报表",
+ type: "MENU",
+ path: "基础数据报表原型",
+ component: "bi/lawyer/lawyer-basic",
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ ],
+ },
+ {
+ id: 134,
+ parentId: 115,
+ name: "案件跟进 - 整体办案",
+ type: "MENU",
+ path: "followup/follow",
+ component: "bi/dispatch/case-follow",
+ sort: 2,
+ visible: 1,
+ icon: "peoples",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ {
+ id: 124,
+ parentId: 115,
+ name: "确权回款表",
+ type: "MENU",
+ path: "fulfill",
+ component: "bi/fulfill/fulfill-plan",
+ sort: 3,
+ visible: 1,
+ icon: "peoples",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ {
+ id: 117,
+ parentId: 115,
+ name: "律师VS案源分布",
+ type: "MENU",
+ path: "source",
+ component: "bi/dispatch/case-source",
+ sort: 4,
+ visible: 1,
+ icon: "peoples",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ {
+ id: 128,
+ parentId: 115,
+ name: "现金回款表",
+ type: "MENU",
+ path: "repay",
+ component: "bi/repay/repay",
+ sort: 5,
+ visible: 1,
+ icon: "peoples",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ {
+ id: 120,
+ parentId: 115,
+ name: "案源方VS案件状态",
+ type: "MENU",
+ path: "state",
+ component: "bi/dispatch/case-state",
+ sort: 10,
+ visible: 1,
+ icon: "peoples",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ {
+ id: 122,
+ parentId: 115,
+ name: "律师VS案件状态",
+ type: "MENU",
+ path: "lawyer-state",
+ component: "bi/dispatch/case-lawyer-state",
+ sort: 10,
+ visible: 1,
+ icon: "peoples",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ {
+ id: 119,
+ parentId: 115,
+ name: "案件明细表",
+ type: "MENU",
+ path: "detail",
+ component: "bi/dispatch/detail",
+ sort: 20,
+ visible: 1,
+ icon: "table",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ {
+ id: 125,
+ parentId: 115,
+ name: "履行明细",
+ type: "MENU",
+ path: "fulfill-detail",
+ component: "bi/fulfill/fulfill-detail",
+ sort: 20,
+ visible: 1,
+ icon: "peoples",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ {
+ id: 126,
+ parentId: 115,
+ name: "全量订单列表",
+ type: "MENU",
+ path: "order-detail",
+ component: "bi/case/order-detail",
+ sort: 25,
+ visible: 1,
+ icon: "peoples",
+ redirect: null,
+ perm: null,
+ children: [],
+ },
+ ],
+ },
+ {
+ id: 40,
+ parentId: 0,
+ name: "接口文档",
+ type: "CATALOG",
+ path: "/api",
+ component: "Layout",
+ sort: 7,
+ visible: 1,
+ icon: "api",
+ redirect: "",
+ perm: null,
+ children: [
+ {
+ id: 41,
+ parentId: 40,
+ name: "Apifox",
+ type: "MENU",
+ path: "apifox",
+ component: "demo/api/apifox",
+ sort: 1,
+ visible: 1,
+ icon: "api",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 103,
+ parentId: 40,
+ name: "Swagger",
+ type: "MENU",
+ path: "swagger",
+ component: "demo/api/swagger",
+ sort: 2,
+ visible: 0,
+ icon: "api",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 104,
+ parentId: 40,
+ name: "Knife4j",
+ type: "MENU",
+ path: "knife4j",
+ component: "demo/api/knife4j",
+ sort: 3,
+ visible: 0,
+ icon: "api",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ ],
+ },
+ {
+ id: 26,
+ parentId: 0,
+ name: "平台文档",
+ type: "CATALOG",
+ path: "/doc",
+ component: "Layout",
+ sort: 8,
+ visible: 1,
+ icon: "document",
+ redirect: null,
+ perm: null,
+ children: [
+ {
+ id: 102,
+ parentId: 26,
+ name: "平台文档(内嵌)",
+ type: "EXTLINK",
+ path: "internal-doc",
+ component: "demo/internal-doc",
+ sort: 1,
+ visible: 1,
+ icon: "document",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 30,
+ parentId: 26,
+ name: "平台文档(外链)",
+ type: "EXTLINK",
+ path: "https://juejin.cn/post/7228990409909108793",
+ component: "",
+ sort: 2,
+ visible: 1,
+ icon: "link",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ ],
+ },
+ {
+ id: 20,
+ parentId: 0,
+ name: "多级菜单",
+ type: "CATALOG",
+ path: "/multi-level",
+ component: "Layout",
+ sort: 9,
+ visible: 1,
+ icon: "cascader",
+ redirect: "/multi-level/multi-level1",
+ perm: null,
+ children: [
+ {
+ id: 21,
+ parentId: 20,
+ name: "菜单一级",
+ type: "MENU",
+ path: "multi-level1",
+ component: "demo/multi-level/level1",
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: "/multi-level/multi-level2",
+ perm: null,
+ children: [
+ {
+ id: 22,
+ parentId: 21,
+ name: "菜单二级",
+ type: "MENU",
+ path: "multi-level2",
+ component: "demo/multi-level/children/level2",
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: "/multi-level/multi-level2/multi-level3-1",
+ perm: null,
+ children: [
+ {
+ id: 23,
+ parentId: 22,
+ name: "菜单三级-1",
+ type: "MENU",
+ path: "multi-level3-1",
+ component: "demo/multi-level/children/children/level3-1",
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 24,
+ parentId: 22,
+ name: "菜单三级-2",
+ type: "MENU",
+ path: "multi-level3-2",
+ component: "demo/multi-level/children/children/level3-2",
+ sort: 2,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ id: 36,
+ parentId: 0,
+ name: "组件封装",
+ type: "CATALOG",
+ path: "/component",
+ component: "Layout",
+ sort: 10,
+ visible: 1,
+ icon: "menu",
+ redirect: "",
+ perm: null,
+ children: [
+ {
+ id: 37,
+ parentId: 36,
+ name: "富文本编辑器",
+ type: "MENU",
+ path: "wang-editor",
+ component: "demo/wang-editor",
+ sort: 1,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 38,
+ parentId: 36,
+ name: "图片上传",
+ type: "MENU",
+ path: "upload",
+ component: "demo/upload",
+ sort: 2,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 39,
+ parentId: 36,
+ name: "图标选择器",
+ type: "MENU",
+ path: "icon-selector",
+ component: "demo/icon-selector",
+ sort: 3,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 95,
+ parentId: 36,
+ name: "字典组件",
+ type: "MENU",
+ path: "dict-demo",
+ component: "demo/dict",
+ sort: 4,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 93,
+ parentId: 36,
+ name: "签名",
+ type: "MENU",
+ path: "signature",
+ component: "demo/signature",
+ sort: 6,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 94,
+ parentId: 36,
+ name: "表格",
+ type: "MENU",
+ path: "table",
+ component: "demo/table",
+ sort: 7,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ ],
+ },
+ {
+ id: 89,
+ parentId: 0,
+ name: "功能演示",
+ type: "CATALOG",
+ path: "/function",
+ component: "Layout",
+ sort: 11,
+ visible: 1,
+ icon: "menu",
+ redirect: "",
+ perm: null,
+ children: [
+ {
+ id: 97,
+ parentId: 89,
+ name: "Icons",
+ type: "MENU",
+ path: "icon-demo",
+ component: "demo/icons",
+ sort: 2,
+ visible: 1,
+ icon: "el-icon-edit",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 90,
+ parentId: 89,
+ name: "Websocket",
+ type: "MENU",
+ path: "/function/websocket",
+ component: "demo/websocket",
+ sort: 3,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ {
+ id: 91,
+ parentId: 89,
+ name: "敬请期待...",
+ type: "CATALOG",
+ path: "other",
+ component: "demo/other",
+ sort: 4,
+ visible: 1,
+ icon: "",
+ redirect: "",
+ perm: null,
+ children: [],
+ },
+ ],
+ },
+ ],
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/menus/:id/form", // 路径会拼接为: /dev-api/api/v1/menus/routes
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: {
+ id: 133,
+ parentId: 115,
+ name: "案件跟进 - 日清日结",
+ type: "MENU",
+ path: "followup/feedback",
+ component: "bi/dispatch/case-feedback",
+ externalUrl:
+ "http://superset.faxinai.cn/token3rd/dashboard/view/pc.htm?pageId=92f515b8-1fd9-4e08-af2c-c314ab8eefb7&accessToken=dab2963e1e415e5b78765c7694929dd2&dd_orientation=auto",
+ perm: null,
+ visible: 1,
+ sort: 1,
+ icon: "peoples",
+ redirect: null,
+ keepAlive: 1,
+ alwaysShow: null,
+ },
+ msg: "一切ok",
+ },
+ },
+]);
diff --git a/mock/role.mock.ts b/mock/role.mock.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f86c8ae286cff251ac4051dfe9dc053b795398f6
--- /dev/null
+++ b/mock/role.mock.ts
@@ -0,0 +1,210 @@
+import path from "path";
+import { createDefineMock } from "vite-plugin-mock-dev-server";
+
+const defineMock = createDefineMock((mock) => {
+ mock.url = path.join(import.meta.env.VITE_APP_BASE_API, mock.url); // 路径会拼接为: /dev-api + url
+});
+
+export default defineMock([
+ {
+ url: "/api/v1/roles/options",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: [
+ {
+ value: 2,
+ label: "系统管理员",
+ },
+ {
+ value: 4,
+ label: "系统管理员1",
+ },
+ {
+ value: 5,
+ label: "系统管理员2",
+ },
+ {
+ value: 6,
+ label: "系统管理员3",
+ },
+ {
+ value: 7,
+ label: "系统管理员4",
+ },
+ {
+ value: 8,
+ label: "系统管理员5",
+ },
+ {
+ value: 9,
+ label: "系统管理员6",
+ },
+ {
+ value: 10,
+ label: "系统管理员7",
+ },
+ {
+ value: 11,
+ label: "系统管理员8",
+ },
+ {
+ value: 12,
+ label: "系统管理员9",
+ },
+ {
+ value: 3,
+ label: "访问游客",
+ },
+ ],
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/roles/page",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: {
+ list: [
+ {
+ id: 2,
+ name: "系统管理员",
+ code: "ADMIN",
+ status: 1,
+ sort: 2,
+ createTime: "2021-03-25 12:39:54",
+ updateTime: null,
+ },
+ {
+ id: 3,
+ name: "访问游客",
+ code: "GUEST",
+ status: 1,
+ sort: 3,
+ createTime: "2021-05-26 15:49:05",
+ updateTime: "2019-05-05 16:00:00",
+ },
+ {
+ id: 4,
+ name: "系统管理员1",
+ code: "ADMIN1",
+ status: 1,
+ sort: 2,
+ createTime: "2021-03-25 12:39:54",
+ updateTime: null,
+ },
+ {
+ id: 5,
+ name: "系统管理员2",
+ code: "ADMIN2",
+ status: 1,
+ sort: 2,
+ createTime: "2021-03-25 12:39:54",
+ updateTime: null,
+ },
+ {
+ id: 6,
+ name: "系统管理员3",
+ code: "ADMIN3",
+ status: 1,
+ sort: 2,
+ createTime: "2021-03-25 12:39:54",
+ updateTime: null,
+ },
+ {
+ id: 7,
+ name: "系统管理员4",
+ code: "ADMIN4",
+ status: 1,
+ sort: 2,
+ createTime: "2021-03-25 12:39:54",
+ updateTime: null,
+ },
+ {
+ id: 8,
+ name: "系统管理员5",
+ code: "ADMIN5",
+ status: 1,
+ sort: 2,
+ createTime: "2021-03-25 12:39:54",
+ updateTime: null,
+ },
+ {
+ id: 9,
+ name: "系统管理员6",
+ code: "ADMIN6",
+ status: 1,
+ sort: 2,
+ createTime: "2021-03-25 12:39:54",
+ updateTime: "2023-12-04 11:43:15",
+ },
+ {
+ id: 10,
+ name: "系统管理员7",
+ code: "ADMIN7",
+ status: 1,
+ sort: 2,
+ createTime: "2021-03-25 12:39:54",
+ updateTime: null,
+ },
+ {
+ id: 11,
+ name: "系统管理员8",
+ code: "ADMIN8",
+ status: 1,
+ sort: 2,
+ createTime: "2021-03-25 12:39:54",
+ updateTime: null,
+ },
+ ],
+ total: 10,
+ },
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/roles/:id/form",
+ method: ["GET"],
+ body: ({ params }) => {
+ const id = params.id;
+ let formData = null;
+ if (id == 2) {
+ formData = {
+ id: 2,
+ name: "系统管理员",
+ code: "ADMIN",
+ sort: 2,
+ status: 1,
+ dataScope: 1,
+ };
+ } else if (id == 3) {
+ formData = {
+ id: 3,
+ name: "访问游客",
+ code: "GUEST",
+ sort: 3,
+ status: 1,
+ dataScope: 2,
+ };
+ } else {
+ formData = {
+ id: 4,
+ name: "系统管理员1",
+ code: "ADMIN1",
+ sort: 2,
+ status: 1,
+ dataScope: 1,
+ };
+ }
+
+ return {
+ code: "00000",
+ data: formData,
+ msg: "一切ok",
+ };
+ },
+ },
+]);
diff --git a/mock/role.ts b/mock/role.ts
deleted file mode 100644
index 6c3419f614b6fa598e957022820245361791339b..0000000000000000000000000000000000000000
--- a/mock/role.ts
+++ /dev/null
@@ -1,165 +0,0 @@
-import { MockMethod } from "vite-plugin-mock";
-
-export default [
- {
- url: "/api/v1/roles/options",
- method: "get",
- response: () => {
- return {
- code: "00000",
- data: [
- {
- value: 2,
- label: "系统管理员",
- },
- {
- value: 4,
- label: "系统管理员1",
- },
- {
- value: 5,
- label: "系统管理员2",
- },
- {
- value: 6,
- label: "系统管理员3",
- },
- {
- value: 7,
- label: "系统管理员4",
- },
- {
- value: 8,
- label: "系统管理员5",
- },
- {
- value: 9,
- label: "系统管理员6",
- },
- {
- value: 10,
- label: "系统管理员7",
- },
- {
- value: 11,
- label: "系统管理员8",
- },
- {
- value: 12,
- label: "系统管理员9",
- },
- {
- value: 3,
- label: "访问游客",
- },
- ],
- msg: "一切ok",
- };
- },
- },
- {
- url: "/api/v1/roles/page",
- method: "get",
- response: () => {
- return {
- code: "00000",
- data: {
- list: [
- {
- id: 2,
- name: "系统管理员",
- code: "ADMIN",
- status: 1,
- sort: 2,
- createTime: "2021-03-25 12:39:54",
- updateTime: null,
- },
- {
- id: 3,
- name: "访问游客",
- code: "GUEST",
- status: 1,
- sort: 3,
- createTime: "2021-05-26 15:49:05",
- updateTime: "2019-05-05 16:00:00",
- },
- {
- id: 4,
- name: "系统管理员1",
- code: "ADMIN1",
- status: 1,
- sort: 2,
- createTime: "2021-03-25 12:39:54",
- updateTime: null,
- },
- {
- id: 5,
- name: "系统管理员2",
- code: "ADMIN1",
- status: 1,
- sort: 2,
- createTime: "2021-03-25 12:39:54",
- updateTime: null,
- },
- {
- id: 6,
- name: "系统管理员3",
- code: "ADMIN1",
- status: 1,
- sort: 2,
- createTime: "2021-03-25 12:39:54",
- updateTime: null,
- },
- {
- id: 7,
- name: "系统管理员4",
- code: "ADMIN1",
- status: 1,
- sort: 2,
- createTime: "2021-03-25 12:39:54",
- updateTime: null,
- },
- {
- id: 8,
- name: "系统管理员5",
- code: "ADMIN1",
- status: 1,
- sort: 2,
- createTime: "2021-03-25 12:39:54",
- updateTime: null,
- },
- {
- id: 9,
- name: "系统管理员6",
- code: "ADMIN1",
- status: 1,
- sort: 2,
- createTime: "2021-03-25 12:39:54",
- updateTime: null,
- },
- {
- id: 10,
- name: "系统管理员7",
- code: "ADMIN1",
- status: 1,
- sort: 2,
- createTime: "2021-03-25 12:39:54",
- updateTime: null,
- },
- {
- id: 11,
- name: "系统管理员8",
- code: "ADMIN1",
- status: 1,
- sort: 2,
- createTime: "2021-03-25 12:39:54",
- updateTime: null,
- },
- ],
- total: 11,
- },
- msg: "一切ok",
- };
- },
- },
-] as MockMethod[];
diff --git a/mock/router.ts b/mock/router.ts
deleted file mode 100644
index 60375071f7630d8d5993786ebbe2bbadfb431873..0000000000000000000000000000000000000000
--- a/mock/router.ts
+++ /dev/null
@@ -1,412 +0,0 @@
-import { MockMethod } from "vite-plugin-mock";
-const url = "/api/v1/menus/routes";
-const method = "get";
-const data = {
- code: "00000",
- data: [
- {
- path: "/system",
- component: "Layout",
- redirect: "/system/user",
- meta: {
- title: "系统管理",
- icon: "system",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- children: [
- {
- path: "user",
- component: "system/user/index",
- name: "User",
- meta: {
- title: "用户管理",
- icon: "user",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "role",
- component: "system/role/index",
- name: "Role",
- meta: {
- title: "角色管理",
- icon: "role",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "menu",
- component: "system/menu/index",
- name: "Menu",
- meta: {
- title: "菜单管理",
- icon: "menu",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "dept",
- component: "system/dept/index",
- name: "Dept",
- meta: {
- title: "部门管理",
- icon: "tree",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "dict",
- component: "system/dict/index",
- name: "DictType",
- meta: {
- title: "字典管理",
- icon: "dict",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- ],
- },
-
- {
- path: "/api",
- component: "Layout",
- meta: {
- title: "接口",
- icon: "api",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- children: [
- {
- path: "apidoc",
- component: "demo/api-doc",
- name: "Apidoc",
- meta: {
- title: "接口文档",
- icon: "api",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: false,
- },
- },
- ],
- },
- {
- path: "/external-link",
- component: "Layout",
- redirect: "noredirect",
- meta: {
- title: "外部链接",
- icon: "link",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- children: [
- {
- path: "https://juejin.cn/post/7228990409909108793",
- meta: {
- title: "document",
- icon: "document",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- ],
- },
- {
- path: "/multi-level",
- component: "Layout",
- redirect: "/multi-level/multi-level1",
- meta: {
- title: "多级菜单",
- icon: "multi_level",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- children: [
- {
- path: "multi-level1",
- component: "demo/multi-level/level1",
- redirect: "/multi-level/multi-level2",
- meta: {
- title: "菜单一级",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- children: [
- {
- path: "multi-level2",
- component: "demo/multi-level/children/level2",
- redirect: "/multi-level/multi-level2/multi-level3-1",
- meta: {
- title: "菜单二级",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- children: [
- {
- path: "multi-level3-1",
- component: "demo/multi-level/children/children/level3-1",
- name: "MultiLevel31",
- meta: {
- title: "菜单三级-1",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "multi-level3-2",
- component: "demo/multi-level/children/children/level3-2",
- name: "MultiLevel32",
- meta: {
- title: "菜单三级-2",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- ],
- },
- ],
- },
- ],
- },
- {
- path: "/component",
- component: "Layout",
- meta: {
- title: "组件封装",
- icon: "menu",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- children: [
- {
- path: "wang-editor",
- component: "demo/wang-editor",
- name: "wang-editor",
- meta: {
- title: "富文本编辑器",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "upload",
- component: "demo/upload",
- name: "upload",
- meta: {
- title: "图片上传",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "icon-selector",
- component: "demo/icon-selector",
- name: "icon-selector",
- meta: {
- title: "图标选择器",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "dict-demo",
- component: "demo/dict",
- name: "DictDemo",
- meta: {
- title: "字典组件",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "taginput",
- component: "demo/taginput",
- name: "taginput",
- meta: {
- title: "标签输入框",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "signature",
- component: "demo/signature",
- name: "signature",
- meta: {
- title: "签名",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "table",
- component: "demo/table",
- name: "Table",
- meta: {
- title: "表格",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- ],
- },
- {
- path: "/table",
- component: "Layout",
- meta: {
- title: "Table",
- icon: "table",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- children: [
- {
- path: "dynamic-table",
- component: "demo/table/dynamic-table/index",
- name: "DynamicTable",
- meta: {
- title: "动态Table",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "drag-table",
- component: "demo/table/drag-table",
- name: "DragTable",
- meta: {
- title: "拖拽Table",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "complex-table",
- component: "demo/table/complex-table",
- name: "ComplexTable",
- meta: {
- title: "综合Table",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- ],
- },
- {
- path: "/function",
- component: "Layout",
- meta: {
- title: "功能演示",
- icon: "menu",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- children: [
- {
- path: "permission",
- component: "demo/permission/page",
- name: "Permission",
- meta: {
- title: "Permission",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "icon-demo",
- component: "demo/icons",
- name: "Icons",
- meta: {
- title: "图标",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "websocket",
- component: "demo/websocket",
- name: "Websocket",
- meta: {
- title: "Websocket",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- {
- path: "other",
- component: "demo/other",
- meta: {
- title: "敬请期待...",
- icon: "",
- hidden: false,
- roles: ["ADMIN"],
- keepAlive: true,
- },
- },
- ],
- },
- ],
- msg: "一切ok",
-};
-
-export default [
- {
- url: url,
- method: method,
- response: () => {
- return data;
- },
- },
-] as MockMethod[];
diff --git a/mock/user.mock.ts b/mock/user.mock.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bc30fb7a0f14cfcd9ef7951332614e06e05c259b
--- /dev/null
+++ b/mock/user.mock.ts
@@ -0,0 +1,131 @@
+import path from "path";
+import { createDefineMock } from "vite-plugin-mock-dev-server";
+
+const defineMock = createDefineMock((mock) => {
+ mock.url = path.join(import.meta.env.VITE_APP_BASE_API, mock.url); // 路径会拼接为: /dev-api + url
+});
+
+export default defineMock([
+ {
+ url: "/api/v1/users/me",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: {
+ userId: 2,
+ nickname: "系统管理员",
+ avatar:
+ "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
+ roles: ["ADMIN"],
+ perms: [
+ "sys:menu:delete",
+ "sys:dept:edit",
+ "sys:dict_type:add",
+ "sys:dict:edit",
+ "sys:dict:delete",
+ "sys:dict_type:edit",
+ "sys:menu:add",
+ "sys:user:add",
+ "sys:role:edit",
+ "sys:dept:delete",
+ "sys:user:edit",
+ "sys:user:delete",
+ "sys:user:reset_pwd",
+ "sys:dept:add",
+ "sys:role:delete",
+ "sys:dict_type:delete",
+ "sys:menu:edit",
+ "sys:dict:add",
+ "sys:role:add",
+ ],
+ },
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/users/page",
+ method: ["GET"],
+ body: {
+ code: "00000",
+ data: {
+ list: [
+ {
+ id: 2,
+ username: "admin",
+ nickname: "系统管理员",
+ mobile: "17621210366",
+ genderLabel: "男",
+ avatar:
+ "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
+ email: null,
+ status: 1,
+ deptName: "有来技术",
+ roleNames: "系统管理员",
+ createTime: "2019-10-10",
+ },
+ {
+ id: 3,
+ username: "test",
+ nickname: "测试小用户",
+ mobile: "17621210366",
+ genderLabel: "男",
+ avatar:
+ "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
+ email: null,
+ status: 1,
+ deptName: "测试部门",
+ roleNames: "访问游客",
+ createTime: "2021-06-04",
+ },
+ ],
+ total: 2,
+ },
+ msg: "一切ok",
+ },
+ },
+
+ {
+ url: "/api/v1/users/:userId/form",
+ method: ["GET"],
+ body: ({ params }) => {
+ const userId = params.userId;
+ let formData = null;
+ if (userId == 2) {
+ formData = {
+ id: 2,
+ username: "admin",
+ nickname: "系统管理员",
+ mobile: "17621210366",
+ gender: 1,
+ avatar:
+ "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
+ email: "",
+ status: 1,
+ deptId: 1,
+ roleIds: [2],
+ };
+ } else if (userId == 3) {
+ formData = {
+ id: 3,
+ username: "test",
+ nickname: "测试小用户",
+ mobile: "17621210366",
+ gender: 1,
+ avatar:
+ "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
+ email: "youlaitech@163.com",
+ status: 1,
+ deptId: 3,
+ roleIds: [3],
+ };
+ }
+
+ return {
+ code: "00000",
+ data: formData,
+ msg: "一切ok",
+ };
+ },
+ },
+]);
diff --git a/mock/user.ts b/mock/user.ts
deleted file mode 100644
index 690f8ea781ff8db84819b25ece341cee80ebb7c8..0000000000000000000000000000000000000000
--- a/mock/user.ts
+++ /dev/null
@@ -1,182 +0,0 @@
-import { MockMethod } from "vite-plugin-mock";
-
-export default [
- {
- url: "/api/hello_world",
- method: "get",
- response: (request) => {
- return {
- msg: "hello world",
- headers: request.headers,
- };
- },
- },
- {
- url: "/api/v1/auth/captcha",
- method: "get",
- response: () => {
- return {
- code: "00000",
- data: {
- captchaKey: "534b8ef2b0a24121bec76391ddd159f9",
- captchaBase64:
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAkCAIAAADNSmkJAAAFKUlEQVR4Xu2ZXUwcVRiGV70wMWo08V5NvPXCrDbFaGpMaZW2hqQxaoiJTRsaMBCNSYtpa2JTKiFSelFa+Q/QZcMWqEhBlh+htbEpZhMrBQrlJ0hBywLLyrJ0WZbje3bqOvPNLHPWrDvdOE9ONmfe78zkzMs335wzWJhJQrBQweS/wTQ6QWgYHdoIOcecOe05O+t2WkutO+p2ZF3Ksg/YV9ZW6FATYajR3nveg60H9327r3O8c35lHgp+r05dPdJzBL73TPSQ8SaCKIxGLsPlop+K0JHrEkPuoT31e5qGmmjARACF0agYyGVNlyVm/pzZXrN9fHGcBkz0UBid+31u93i3XFFT80vN8cvHqWqih8Lo1NpUqS5vwh3vnd223VQ10UNh9NbyrcFQUK6oCawHUipSqGqiB83oBf+CXFGDMp1mS6OqiR4Ko7FexkpOrqhpHGw82nOUqiZ6KIzGrkRuorW0dJMmOy+hOCfYGzb2RBFv6HRO0gEJw/U7y+pgL1bwmTxexN6sZ31TdEwEhdG+gA+7EqyXpUO1uZH20cWL8hMTRt1N9tBXzCJrOIRoCPJpSO2RAp4HmtCdIfZ+2JWgEBN9LbR28seTGU0Zue1tMLp+YIAMSADzfvbkKX4/eb28j4YODiGin3heqmIlLja5hAUCu+nmGY3JWKvpMAlqNGgebsauBOvlqSX+JEx7p7EbTLen53XlzfmWUioqXikrc68Y8N2juJ/fyVsNChGHEE//rBANYWaZz+TRQqpLaBgNsPfDrgSpbS21YtV87IdjrlkX9JZbt5DOma2t9ITo5F+5glN22WwL/n+yDv00mw06orKxOqQ5+J04hhViwzAXETIcJDVm8uxZqktoGx2Nj9t43Wgaul/ERQiGQvtbWnDWgZYW9CXlQFjZ/7ciyHNn+Z2MexTimIeLz59TiIln0M1e+IbPpOAaDUnEYPTi6iqKxpbycs/qKo1tCslfKcffPn9enuMiPPY1vxO/ckeFQ4h46cdGqUWoidE/y54q5tPY5WDrGzQqIXot4BgchEE57e00IMCw2/1qZSVO/7SjA78o9INzcxsbrL+fnTnDDh9mmZn8F30oG1Hm+nABv5mQMopDS/h1HxtqTzWbABMe9sxpPoe9zezeOo1GELqWhPS8t46M0IAYHbdvR1aHbaOjbjfLz2eFhez6dba4yAfgF30o0BFVE8+Mjh/wFxPI+I5mAEHU6Ls+38vhTFwOBGhMDF8gkFpbC5ffsdv/uBs6dIj19dExEtARVXv9YNbop8NFY3aZ6gRRo+tu3IBHnzmdNCBMXldXJKPfL74WzWUJRE+coDUknqsOdZXQbAJYwluVTbOZI3Qt8GFzMwxyjo3RgBiN4fr+elXVpZGRLWXl6PdOTtJBSlBDUK/lnIrjOlrtqWYTQDJaF6FrTXu9sOa1ysrVoM5HVE1GFxZQcyJ/p+xzv6K/rbr6N6+XDpUBl0tKFIrbz78qWB6YnWFMCBld4XLBms+7df75ook/GNzb0GCV7U1Qfz9p64TyQWNjYD3qe9rj4SMJtQP3MyjSDPzWIRHPjH7X4YAvfXoPuyZf9Pbi3PcuXIh4mp3NllYC6XY79C+jl2o8PBipxjnBttn4MgMNnWgfcRJGPI2OL8hTj3LloIlmRicvBhiNykvecpqoa3RSY4DRcLAwyicuOepVR1JjgNFYHWONHL04czTX0UmNAUYD7Pr+xc4wqTHGaBb2OtZvHUmNYUazcA2J6etdUmOk0f8rTKMTxF91RG0D1SwYGwAAAABJRU5ErkJggg==",
- },
- msg: "一切ok",
- };
- },
- },
- {
- url: "/api/v1/auth/login",
- method: "post",
- response: () => {
- return {
- code: "00000",
- data: {
- accessToken:
- "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImp0aSI6IjE2YWJkNTlkOTAxNzQwZDliYmI3ZjczODBhZDkyNzNhIiwidXNlcklkIjoyLCJ1c2VybmFtZSI6ImFkbWluIiwiZGVwdElkIjoxLCJkYXRhU2NvcGUiOjEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwiZXhwIjoxNjkxMTAzMzgyfQ.P4cuIfmPepl3HuguhMS7NXn5a7IUPpsLbmtA_rHOhHk",
- tokenType: "Bearer",
- refreshToken: null,
- expires: null,
- },
- msg: "一切ok",
- };
- },
- },
- {
- url: "/api/v1/users/me",
- method: "get",
- response: () => {
- return {
- code: "00000",
- data: {
- userId: 2,
- nickname: "系统管理员",
- avatar:
- "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
- roles: ["ADMIN"],
- perms: [
- "sys:menu:delete",
- "sys:dept:edit",
- "sys:dict_type:add",
- "sys:dict:edit",
- "sys:dict:delete",
- "sys:dict_type:edit",
- "sys:menu:add",
- "sys:user:add",
- "sys:role:edit",
- "sys:dept:delete",
- "sys:user:edit",
- "sys:user:delete",
- "sys:user:reset_pwd",
- "sys:dept:add",
- "sys:role:delete",
- "sys:dict_type:delete",
- "sys:menu:edit",
- "sys:dict:add",
- "sys:role:add",
- ],
- },
- msg: "一切ok",
- };
- },
- },
- {
- url: "/api/v1/auth/logout",
- method: "delete",
- response: () => {
- return {
- code: "00000",
- data: {},
- msg: "string",
- };
- },
- },
- {
- url: "/api/v1/users/page",
- method: "get",
- response: () => {
- return {
- code: "00000",
- data: {
- list: [
- {
- id: 2,
- username: "admin",
- nickname: "系统管理员",
- mobile: "17621210366",
- genderLabel: "男",
- avatar:
- "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
- email: null,
- status: 1,
- deptName: "有来技术",
- roleNames: "系统管理员",
- createTime: "2019-10-10",
- },
- {
- id: 3,
- username: "test",
- nickname: "测试小用户",
- mobile: "17621210366",
- genderLabel: "男",
- avatar:
- "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
- email: null,
- status: 1,
- deptName: "测试部门",
- roleNames: "访问游客",
- createTime: "2021-06-04",
- },
- ],
- total: 2,
- },
- msg: "一切ok",
- };
- },
- },
-
- {
- url: "/api/v1/users/:id/form",
- method: "get",
- response: ({ url }) => {
- const id = url.match(/\/api\/v1\/users\/(\d+)\/form/)[1];
- let formData = null;
- if (id == 2) {
- formData = {
- id: 2,
- username: "admin",
- nickname: "系统管理员",
- mobile: "17621210366",
- gender: 1,
- avatar:
- "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
- email: "",
- status: 1,
- deptId: 1,
- roleIds: [2],
- };
- } else if (id == 3) {
- formData = {
- id: 3,
- username: "test",
- nickname: "测试小用户",
- mobile: "17621210366",
- gender: 1,
- avatar:
- "https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif",
- email: "youlaitech@163.com",
- status: 1,
- deptId: 3,
- roleIds: [3],
- };
- }
-
- return {
- code: "00000",
- data: formData,
- msg: "一切ok",
- };
- },
- },
-] as MockMethod[];
diff --git a/package.json b/package.json
index a71aeed8c8d0ae503e642e84f115acea46c3aa67..db06906811c9edfc02488aea7cbf17caa36aaa34 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,13 @@
{
"name": "vue3-element-admin",
- "version": "2.7.0",
+ "version": "2.8.2",
"private": true,
+ "type": "module",
"scripts": {
"preinstall": "npx only-allow pnpm",
"dev": "vite serve --mode development",
- "build:prod": "vite build --mode production && vue-tsc --noEmit",
+ "build:prod": "vite build --mode production",
+ "build:dev": "vite build --mode development",
"prepare": "husky install",
"lint:eslint": "eslint --fix --ext .ts,.js,.vue ./src ",
"lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"",
@@ -40,82 +42,85 @@
]
},
"dependencies": {
- "@element-plus/icons-vue": "^2.1.0",
- "@vitejs/plugin-vue": "^4.4.0",
- "@vueuse/core": "^10.5.0",
+ "@element-plus/icons-vue": "^2.3.1",
+ "@vitejs/plugin-vue": "^4.6.2",
+ "@vueuse/components": "^10.9.0",
+ "@vueuse/core": "^10.7.1",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "5.1.10",
- "axios": "^1.6.0",
+ "axios": "^1.6.5",
+ "date-fns": "^3.6.0",
"echarts": "^5.4.3",
- "element-plus": "^2.4.2",
+ "element-plus": "^2.7.3",
"lodash-es": "^4.17.21",
- "mockjs": "^1.1.0",
"net": "^1.0.2",
"nprogress": "^0.2.0",
"path-browserify": "^1.0.1",
"path-to-regexp": "^6.2.1",
"pinia": "^2.1.7",
+ "qs": "^6.11.2",
"screenfull": "^6.0.2",
"sockjs-client": "1.6.1",
- "sortablejs": "^1.15.0",
+ "sortablejs": "^1.15.1",
"stompjs": "^2.3.3",
- "terser": "^5.24.0",
- "vue": "^3.3.8",
+ "terser": "^5.26.0",
+ "vue": "^3.4.8",
"vue-i18n": "9.2.2",
"vue-router": "^4.2.5",
- "xlsx": "^0.18.5",
- "dayjs": "^1.11.10"
+ "xlsx": "^0.18.5"
},
"devDependencies": {
"@commitlint/cli": "^17.8.1",
"@commitlint/config-conventional": "^17.8.1",
- "@iconify-json/ep": "^1.1.12",
- "@types/lodash": "^4.14.201",
+ "@iconify-json/ep": "^1.1.14",
+ "@types/lodash": "^4.14.202",
+ "@types/lodash-es": "^4.17.12",
+ "@types/node": "^20.14.2",
"@types/nprogress": "^0.2.3",
"@types/path-browserify": "^1.0.2",
"@types/sockjs-client": "^1.5.4",
- "@types/sortablejs": "^1.15.5",
- "@types/stompjs": "^2.3.8",
+ "@types/sortablejs": "^1.15.7",
+ "@types/stompjs": "^2.3.9",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
- "@vitejs/plugin-vue-jsx": "^3.0.2",
+ "@vitejs/plugin-vue-jsx": "^3.1.0",
"autoprefixer": "^10.4.16",
"commitizen": "^4.3.0",
- "cz-git": "^1.7.1",
- "eslint": "^8.53.0",
+ "cz-git": "^1.8.0",
+ "eslint": "^8.56.0",
"eslint-config-prettier": "^8.10.0",
- "eslint-plugin-import": "^2.29.0",
+ "eslint-plugin-import": "^2.29.1",
"eslint-plugin-prettier": "^4.2.1",
- "eslint-plugin-vue": "^9.18.1",
+ "eslint-plugin-vue": "^9.20.0",
"fast-glob": "^3.3.2",
"husky": "^8.0.3",
"lint-staged": "^13.3.0",
- "postcss": "^8.4.31",
+ "postcss": "^8.4.33",
"postcss-html": "^1.5.0",
"postcss-scss": "^4.0.9",
"prettier": "^2.8.8",
- "sass": "^1.69.5",
+ "sass": "^1.69.7",
"stylelint": "^15.11.0",
"stylelint-config-html": "^1.1.0",
- "stylelint-config-recess-order": "^4.3.0",
+ "stylelint-config-recess-order": "^4.4.0",
"stylelint-config-recommended-scss": "^13.1.0",
"stylelint-config-recommended-vue": "^1.5.0",
"stylelint-config-standard": "^34.0.0",
"stylelint-config-standard-scss": "^11.1.0",
- "typescript": "^5.2.2",
- "unocss": "^0.51.13",
+ "typescript": "^5.3.3",
+ "unocss": "^0.58.3",
"unplugin-auto-import": "^0.15.3",
"unplugin-icons": "^0.16.6",
"unplugin-vue-components": "^0.24.1",
- "vite": "^4.5.0",
- "vite-plugin-mock": "^3.0.0",
+ "vite": "^5.0.11",
+ "vite-plugin-mock-dev-server": "^1.4.5",
"vite-plugin-svg-icons": "^2.0.1",
- "vue-tsc": "^1.8.22"
+ "vue-tsc": "^1.8.27"
},
"repository": "https://gitee.com/youlaiorg/vue3-element-admin.git",
"author": "有来开源组织",
"license": "MIT",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
}
diff --git a/public/favicon.ico b/public/favicon.ico
index df36fcfb72584e00488330b560ebcf34a41c64c2..c590820d96a83391ff7265603432c514a4326693 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/src/App.vue b/src/App.vue
index dd2ac67225d7bedb53a392b031c8f05e291dcd29..4a3acc95f0497c1484b4ade390bcd2c10868115d 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -9,3 +9,29 @@ const appStore = useAppStore();
+
+
diff --git a/src/api/auth/index.ts b/src/api/auth/index.ts
index 645628e1c3c7041589c4f86dbcf171d51d1a5b6c..b6b5a5aa1f708543717d7d41b8fa31b6521a184b 100644
--- a/src/api/auth/index.ts
+++ b/src/api/auth/index.ts
@@ -43,3 +43,17 @@ export function getCaptchaApi(): AxiosPromise {
method: "get",
});
}
+
+//企微code登录
+export function wxLoginApi(code: string): AxiosPromise {
+ return request({
+ url: "/api/v1/auth/login/wxCode/" + code,
+ method: "post",
+ data: {
+ wxCode: code,
+ },
+ /*headers: {
+ "Content-Type": "multipart/form-data",
+ },*/
+ });
+}
diff --git a/src/api/bi/case/index.ts b/src/api/bi/case/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..694d4c2ba2e55398a54efa07f8a1c72c36d0bddf
--- /dev/null
+++ b/src/api/bi/case/index.ts
@@ -0,0 +1,44 @@
+import { CasePageVO } from "@/api/case/main/types";
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+import qs from "qs";
+
+import { PivotResult, PivotConfig } from "./types";
+
+const root_path = "/api/v1/bi/case/";
+
+/**
+ * 统计图生成
+ *
+ */
+export function listAllCasesForStatistics(): AxiosPromise {
+ return request({
+ url: root_path + "listAllCasesPivotForStatistics",
+ method: "get",
+ });
+}
+
+/**
+ * 统计图生成
+ *
+ */
+export function listAllCasesPivotForStatistics(
+ pivotConfig: PivotConfig
+): AxiosPromise {
+ return request({
+ url: root_path + "listAllCasesPivotForStatistics",
+ method: "get",
+ params: pivotConfig,
+ paramsSerializer: function (params) {
+ return qs.stringify(params, { arrayFormat: "repeat" });
+ },
+ });
+}
+
+export function getQuickBiShareUrl(pageId: string): AxiosPromise {
+ return request({
+ url: root_path + "getQuickBiShareUrl",
+ method: "get",
+ params: { pageId: pageId },
+ });
+}
diff --git a/src/api/bi/case/types.ts b/src/api/bi/case/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ff5aa0c1e5bbf6ea19a8306aae8c7386200a4168
--- /dev/null
+++ b/src/api/bi/case/types.ts
@@ -0,0 +1,12 @@
+export interface PivotResult {
+ rows?: string[];
+ cols?: string[];
+ data?: any[];
+}
+
+export interface PivotConfig {
+ rowFields?: string[];
+ columnFields?: string[];
+ aggregateField?: string;
+ funcName?: string;
+}
diff --git a/src/api/call-center/cdr/index.ts b/src/api/call-center/cdr/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d4ce745baafe66d8b82a32e43606a12077e32cdb
--- /dev/null
+++ b/src/api/call-center/cdr/index.ts
@@ -0,0 +1,33 @@
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+import { CdrPageQuery, CdrPageVO, CdrPageResult, CdrRecordVO } from "./types";
+
+/**
+ * 查询通话记录
+ *
+ * @param queryParams
+ */
+export function getCdrPage(
+ queryParams?: CdrPageQuery
+): AxiosPromise {
+ return request({
+ url: "/api/v1/cc/cdr/page",
+ method: "get",
+ params: queryParams,
+ });
+}
+
+/**
+ * 查询录音
+ *
+ * @param ids
+ */
+export function listCdrRecords(
+ sessioinId: string
+): AxiosPromise {
+ return request({
+ url: "/api/v1/cc/cdr/records",
+ method: "get",
+ params: { sessionId: sessioinId },
+ });
+}
diff --git a/src/api/call-center/cdr/types.ts b/src/api/call-center/cdr/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..998f845ae87708d35467142057c642dd9dc38103
--- /dev/null
+++ b/src/api/call-center/cdr/types.ts
@@ -0,0 +1,59 @@
+/**
+ * 角色查询参数
+ */
+export interface CdrPageQuery extends PageQuery {
+ keywords?: string;
+
+ userId?: string;
+
+ direction?: string;
+
+ seat?: string;
+
+ endStatusString?: string;
+
+ startTime?: string;
+
+ endTime?: string;
+}
+
+export interface CdrPageVO {
+ id: number;
+ sessionId: string;
+ sdkAppId: number;
+ caller: string;
+ callee: string;
+ direction: string;
+ duration: number;
+ seatName?: string;
+ seatNick?: string;
+ seatPhone?: string;
+ telNumber?: string;
+ telProvince?: string;
+ telCity?: string;
+ telOperator?: string;
+ userId?: number;
+ userName?: string;
+ ivrDuration?: number;
+ ringTimestamp?: Date; // 这里假设 LocalDateTime 被转换为 Date
+ acceptTimestamp?: Date;
+ endedTimestamp?: Date;
+ startTimestamp?: Date;
+ queuedTimestamp?: Date;
+ hungupSide: string;
+ endStatusString: string;
+ createTime: Date;
+}
+
+export type CdrPageResult = PageResult;
+
+export interface CdrRecordVO {
+ id: number;
+ sdkAppId: number;
+ sessionId: string;
+ recordId: string;
+ timestamp: Date; // 这里假设 LocalDateTime 被转换为 Date
+ endpointUser: string;
+ recordUrl: string;
+ customRecordUrl?: string;
+}
diff --git a/src/api/call-center/route/index.ts b/src/api/call-center/route/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..40df334dd42841ae40864ff65182dac16f011111
--- /dev/null
+++ b/src/api/call-center/route/index.ts
@@ -0,0 +1,112 @@
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+import {
+ PhoneRouteQuery,
+ PhoneRoutePageResult,
+ PhoneRouteForm,
+ Project,
+ AreaCode,
+} from "./types";
+
+/**
+ * 接口:
+ * 1. 获取坐席分配分页列表
+ * 2. 增加坐席分配项
+ * 3. 删除坐席分配项
+ * 4. 编辑坐席分配项
+ * 5. 增加/编辑坐席——查询被叫号码列表
+ * 6. 增加/编辑坐席——根据省份或者城市名查询区号
+ * 7. 增加/编辑坐席——根据姓名模糊搜索助理
+ */
+
+const root_path = "/api/v1/cc/route/";
+
+/**
+ * 获取坐席分配分页列表
+ *
+ * @param queryParams
+ */
+export function getPhoneRoutePage(
+ queryParams?: PhoneRouteQuery
+): AxiosPromise {
+ return request({
+ url: root_path + "page",
+ method: "get",
+ params: queryParams,
+ });
+}
+
+/**
+ * 获取角色详情
+ *
+ * @param id
+ */
+export function getPhoneRouteForm(id: number): AxiosPromise {
+ return request({
+ url: root_path + id,
+ method: "get",
+ });
+}
+
+/**
+ * 增加坐席分配项
+ *
+ * @param data
+ */
+export function addPhoneRoute(data: PhoneRouteForm) {
+ return request({
+ url: root_path + "add",
+ method: "post",
+ data: data,
+ });
+}
+
+/**
+ * 编辑坐席分配项
+ *
+ * @param id
+ * @param data
+ */
+export function updatePhoneRoute(id: number, data: PhoneRouteForm) {
+ return request({
+ url: root_path + id,
+ method: "put",
+ data: data,
+ });
+}
+
+/**
+ * 删除坐席分配项,多个以英文逗号(,)分割
+ *
+ * @param ids
+ */
+export function deletePhoneRoute(ids: string) {
+ return request({
+ url: root_path + ids,
+ method: "delete",
+ });
+}
+
+/**
+ * 获取所有项目
+ *
+ * @param ids
+ */
+export function listProject(): AxiosPromise {
+ return request({
+ url: root_path + "listProject",
+ method: "get",
+ });
+}
+
+/**
+ * 获取所有区号
+ *
+ * @param ids
+ */
+export function listAreaCode(): AxiosPromise {
+ return request({
+ url: root_path + "listAreaCode",
+ method: "get",
+ });
+}
diff --git a/src/api/call-center/route/types.ts b/src/api/call-center/route/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..64208f0edcbcd5ea7ad5c9715dda55b51f91d093
--- /dev/null
+++ b/src/api/call-center/route/types.ts
@@ -0,0 +1,126 @@
+/**
+ * 角色查询参数
+ */
+export interface PhoneRouteQuery extends PageQuery {
+ keywords?: string;
+ project?: string;
+ userId?: string;
+}
+
+/**
+ * 电话路由分页对象
+ */
+export interface PhoneRoutePageVO {
+ /**
+ * ID
+ */
+ id?: number;
+ /**
+ * 被叫号码标签
+ */
+ calleeNumber?: string;
+ /**
+ * 被叫号码技能组ID
+ */
+ calleeSkillId?: number;
+ /**
+ * 座机区号
+ */
+ areaCode?: string;
+ /**
+ * 省份
+ */
+ province?: string;
+ /**
+ * 城市
+ */
+ city?: string;
+ /**
+ * 电话号码,去掉0086前缀
+ */
+ callerNumber?: string;
+ /**
+ * 坐席人员ID
+ */
+ userId?: number;
+ /**
+ * 坐席人员姓名
+ */
+ userName?: string;
+ /**
+ * 创建时间
+ */
+ createTime?: string;
+
+ /**
+ * 是否禁用
+ */
+ deleted?: number;
+}
+
+/**
+ * 电话坐席分配分页
+ */
+export type PhoneRoutePageResult = PageResult;
+
+export interface Project {
+ /**
+ * ID
+ */
+ id: number;
+ /**
+ * 项目名称
+ */
+ name: string;
+ /**
+ * 项目名称
+ */
+ alias: string;
+}
+
+export interface AreaCode {
+ /**
+ * ID
+ */
+ id: number;
+ /**
+ * 座机区号
+ */
+ code: string;
+ /**
+ * 座机区号对应省份
+ */
+ province: string;
+ /**
+ * 座机区号对应城市
+ */
+ city: string;
+}
+
+/**
+ * 电话坐席表单对象
+ */
+export interface PhoneRouteForm {
+ /**
+ * ID
+ */
+ id?: number;
+ /**
+ * 项目名称
+ */
+ project?: string;
+ projectAlias?: string;
+ /**
+ * 座机区号
+ */
+ areaCode?: string[];
+ /**
+ * 电话号码,去掉0086前缀
+ */
+ callerNumber?: string;
+ /**
+ * 坐席人员
+ */
+ userName?: string;
+ userId?: number;
+}
diff --git a/src/api/call-center/seat/index.ts b/src/api/call-center/seat/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d0a05eefd21c81918f8d3bcb0ca3f7411829757c
--- /dev/null
+++ b/src/api/call-center/seat/index.ts
@@ -0,0 +1,54 @@
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+import { Seat, SeatForm, SeatQuery } from "./types";
+
+const root_path = "/api/v1/cc/seat/";
+/**
+ * 获取所有用户
+ *
+ * @param ids
+ */
+export function listSeat(seatQuery: SeatQuery | null): AxiosPromise {
+ return request({
+ url: root_path + "listSeat",
+ method: "get",
+ params: seatQuery,
+ });
+}
+
+/**
+ * 新增坐席
+ *
+ * @param data
+ */
+export function addSeat(data: SeatForm) {
+ return request({
+ url: root_path + "add",
+ method: "post",
+ data: data,
+ });
+}
+
+/**
+ * 删除坐席,多个以英文逗号(,)分割
+ *
+ * @param ids
+ */
+export function deleteSeats(ids: string) {
+ return request({
+ url: root_path + ids,
+ method: "delete",
+ });
+}
+
+/**
+ * 回收坐席重新分配
+ * @param ids
+ * @returns
+ */
+export function reuseSeats(ids: string) {
+ return request({
+ url: root_path + "reuse/" + ids,
+ method: "put",
+ });
+}
diff --git a/src/api/call-center/seat/types.ts b/src/api/call-center/seat/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b01433447794b8c80c681b17e4743cbaae0e4625
--- /dev/null
+++ b/src/api/call-center/seat/types.ts
@@ -0,0 +1,46 @@
+export interface SeatForm {
+ /**
+ * 坐席号码/名称
+ */
+ seatName?: string;
+}
+
+export interface SeatQuery {
+ keywords?: string;
+ status?: number;
+}
+
+export interface Seat {
+ /**
+ * ID
+ */
+ id: number;
+
+ /**
+ * 坐席号码/名称
+ */
+ seatName: string;
+
+ /**
+ * 用户ID
+ */
+ userId: number;
+ /**
+ * 用户名称
+ */
+ userName: string;
+ /**
+ * 话机类型
+ */
+ telType: string;
+ /**
+ * 坐席话机号码
+ */
+ innerNumber: string;
+ /**
+ * 创建时间
+ */
+ createTime: string;
+
+ deleted: number;
+}
diff --git a/src/api/case/answer/index.ts b/src/api/case/answer/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f62ffdd9eadf3e2b1ad395cc7691569336d8b77a
--- /dev/null
+++ b/src/api/case/answer/index.ts
@@ -0,0 +1,76 @@
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+import { AnswerForm, AnswerPageQuery, AnswerVO } from "@/api/case/answer/types";
+
+const root_path = "/api/v1/answerAndRegisterTickets/";
+
+// 获取表格列表
+export function getList(
+ queryParams: AnswerPageQuery
+): AxiosPromise> {
+ return request({
+ url: root_path + "page",
+ method: "get",
+ params: queryParams,
+ });
+}
+
+// 新增表单
+export function doCreate(data: AnswerForm): AxiosPromise {
+ return request({
+ url: root_path + "add",
+ method: "post",
+ data: data,
+ });
+}
+
+// 修改表单
+export function doEdit(data: AnswerForm): AxiosPromise {
+ return request({
+ url: root_path + data.id,
+ method: "put",
+ data: data,
+ });
+}
+
+// 删除表格条目
+export function doDelete(ids: string) {
+ return request({
+ url: root_path + ids,
+ method: "delete",
+ });
+}
+
+// 获取条目详情
+export function getDetail(ticketId: number | undefined) {
+ return request({
+ url: root_path + ticketId + "/form",
+ method: "get",
+ });
+}
+
+// 筛选项
+//自定义标签
+export function getLabelOption() {
+ return request({
+ url: root_path + "listLabel",
+ method: "get",
+ });
+}
+
+//推送对象
+export function getCaseLawyersOption() {
+ return request({
+ url: "/api/v1/case/misc/listAllCaseLawyersAndAssistant",
+ method: "get",
+ });
+}
+
+//接听人
+export function getAnswerUserIdOption(queryParams: AnswerPageQuery) {
+ return request({
+ url: root_path + "listAnswerUserId",
+ method: "get",
+ params: queryParams,
+ });
+}
diff --git a/src/api/case/answer/types.ts b/src/api/case/answer/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e68717ce4fc16164dab9114e88f1a33ca0041e1d
--- /dev/null
+++ b/src/api/case/answer/types.ts
@@ -0,0 +1,62 @@
+export interface AnswerPageQuery extends PageQuery {
+ keywords?: string;
+ startTime?: string;
+ endTime?: string;
+ callType?: string;
+ answerUserId?: string;
+ answerUserIds?: string;
+ pushUserId?: string;
+ pushUserIds?: string;
+ label?: string;
+ callTimeRange?: string;
+}
+
+export interface AnswerVO {
+ id?: number;
+ callTime?: Date;
+ calleePhone?: string;
+ callPhone?: number;
+ callType?: string;
+ callName?: string;
+ callDemands?: string;
+ caseId?: number;
+ plaintiffName?: string;
+ borrowerName?: string;
+ courtName?: string;
+ lawyerName?: string;
+ pushUserId?: string;
+ type?: string;
+ label?: string;
+ answerUserName?: string;
+ createTime?: Date;
+ duration?: number;
+ recordUrl?: string;
+}
+
+export interface AnswerForm {
+ id?: number;
+ callTime?: Date;
+ callPhone?: string;
+ calleePhone?: string;
+ callType?: string;
+ callName?: string;
+ callDemands?: string;
+ caseId?: number | string;
+ plaintiffName?: string;
+ borrowerName?: string;
+ courtId?: number;
+ courtName?: string;
+ lawyerId?: number;
+ lawyerName?: string;
+ answerUserId?: number;
+ answerUserName?: string;
+ label?: string;
+ pushUserId?: string;
+ pushUserIds?: string[];
+ spvName?: string;
+ type?: string;
+ hasCaseDetail?: boolean;
+ ifPushCaseManage?: boolean | number;
+ recordUrl?: "";
+ ifPush?: number;
+}
diff --git a/src/api/case/dispatch/index.ts b/src/api/case/dispatch/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..592433d9217c19b061a8b2ca33cbaefec8f06a0e
--- /dev/null
+++ b/src/api/case/dispatch/index.ts
@@ -0,0 +1,15 @@
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+import { CaseDispatchBatchVO } from "./types";
+
+const root_path = "/api/v1/case/dispatch/";
+
+export function doDispatch(
+ dispatch?: CaseDispatchBatchVO
+): AxiosPromise {
+ return request({
+ url: root_path + "doDispatch",
+ method: "post",
+ data: dispatch,
+ });
+}
diff --git a/src/api/case/dispatch/types.ts b/src/api/case/dispatch/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..21ca51812468149127ce4988add93317432cacdc
--- /dev/null
+++ b/src/api/case/dispatch/types.ts
@@ -0,0 +1,44 @@
+export interface CaseStatisticsVO {
+ id?: number;
+ type?: string;
+ name?: string;
+ count?: number;
+ rows?: number;
+}
+
+export interface SeatStatisticsVO {
+ id?: number;
+ project?: string;
+ areaCode?: string;
+ areaCodeFullname?: string;
+ count?: number;
+ update?: boolean;
+}
+
+export interface CaseDispatchDetailVO {
+ id?: number;
+ batchId?: number;
+ caseId?: number;
+ fromLawyerId?: number;
+ fromLawyerName?: string;
+ toLawyerId?: number;
+ toLawyerName?: string;
+ createUserId?: number;
+ createUserName?: string;
+ createTime?: Date;
+ deleted?: number;
+}
+
+export interface CaseDispatchBatchVO {
+ id?: number;
+ toLawyerId?: number;
+ toLawyerName?: string;
+ cases?: CaseDispatchDetailVO[];
+ seatStatistics?: SeatStatisticsVO[];
+ caseStatistics?: CaseStatisticsVO[];
+ createUserId?: number;
+ createUserName?: string;
+ createTime?: Date;
+ updateTime?: Date;
+ deleted?: number;
+}
diff --git a/src/api/case/llm/index.ts b/src/api/case/llm/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..55d693d310fb92becc731bbb8e2fdebdb23cd35d
--- /dev/null
+++ b/src/api/case/llm/index.ts
@@ -0,0 +1,95 @@
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+import { LlmLabelCategoryVO, LlmLabelVO, LlmEffectiveActionVO } from "./types";
+import { OptionVO } from "../misc/types";
+
+const root_path = "/api/v1/case/llm/";
+/**
+ *
+ *
+ */
+export function addEffectiveAction(
+ effectiveAction?: LlmEffectiveActionVO
+): AxiosPromise {
+ return request({
+ url: root_path + "action/add",
+ method: "post",
+ data: effectiveAction,
+ });
+}
+
+export function updateEffectiveAction(
+ effectiveAction?: LlmEffectiveActionVO
+): AxiosPromise {
+ return request({
+ url: root_path + "action/update",
+ method: "post",
+ data: effectiveAction,
+ });
+}
+
+export function deleteEffectiveAction(
+ effectiveActionId: number
+): AxiosPromise {
+ return request({
+ url: root_path + "action/" + effectiveActionId,
+ method: "delete",
+ });
+}
+
+export function listRemarks(): AxiosPromise {
+ return request({
+ url: root_path + "action/listRemarks",
+ method: "get",
+ });
+}
+
+export function addLabel(label: LlmLabelVO): AxiosPromise {
+ return request({
+ url: root_path + "label/add",
+ method: "post",
+ data: label,
+ });
+}
+
+export function deleteLabel(labelId: number): AxiosPromise {
+ return request({
+ url: root_path + "label/" + labelId,
+ method: "delete",
+ });
+}
+
+export function updateLabel(label: LlmLabelVO): AxiosPromise {
+ return request({
+ url: root_path + "label/" + label.id,
+ method: "put",
+ data: label,
+ });
+}
+
+export function listLabelCategory(): AxiosPromise {
+ return request({
+ url: root_path + "label/listLabelCategory",
+ method: "get",
+ });
+}
+
+export function addLabelCategory(
+ labelCategory: LlmLabelCategoryVO
+): AxiosPromise {
+ return request({
+ url: root_path + "label/addLabelCategory",
+ method: "post",
+ data: labelCategory,
+ });
+}
+
+export function queryLabelTypes(
+ llmLabelVO?: LlmLabelVO
+): AxiosPromise {
+ return request({
+ url: root_path + "label/queryLabelTypes",
+ method: "get",
+ params: llmLabelVO,
+ });
+}
diff --git a/src/api/case/llm/types.ts b/src/api/case/llm/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..26115857f6a5864ba19f804edfddd4e2d3481630
--- /dev/null
+++ b/src/api/case/llm/types.ts
@@ -0,0 +1,35 @@
+export interface LlmLabelCategoryVO {
+ id?: number;
+ name: string;
+ createTime?: Date;
+ multipleKey?: number;
+ hasValue?: number;
+ hasRemark?: number;
+ createdByUserId?: number;
+ createdByUserName?: string;
+}
+
+export interface LlmLabelVO {
+ id?: number;
+ category?: string;
+ labelKey?: string;
+ labelValue?: string;
+ remark?: string;
+ labelUserId?: number;
+ labelUserName?: string;
+ caseId?: number;
+ followupRecordId?: number;
+ multipleKey?: number;
+ hasValue?: number;
+ hasRemark?: number;
+}
+
+export interface LlmEffectiveActionVO {
+ id?: number;
+ caseId?: number;
+ followRecordId?: number;
+ eventType?: number;
+ content?: string;
+ remark?: string;
+ actionTime?: Date;
+}
diff --git a/src/api/case/main/index.ts b/src/api/case/main/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5bb547bf81969fa7a7664038d509e98cc792153d
--- /dev/null
+++ b/src/api/case/main/index.ts
@@ -0,0 +1,117 @@
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+import {
+ CasePageResult,
+ CasePageQuery,
+ CaseQuery,
+ CaseBatchVO,
+ MaterialVO,
+ CaseMaterialVO,
+ CasePageVO,
+ RpaCaseVO,
+ AsyncLoadedData,
+} from "./types";
+import qs from "qs";
+
+const root_path = "/api/v1/case/main/";
+
+/**
+ * 获取所有案件
+ *
+ * @param pageQuery
+ */
+export function listCases(
+ pageQuery?: CasePageQuery
+): AxiosPromise {
+ return request({
+ url: root_path + "listCases",
+ method: "get",
+ params: pageQuery,
+ paramsSerializer: function (params) {
+ return qs.stringify(params, { arrayFormat: "repeat" });
+ },
+ });
+}
+
+export function queryCaseByDefendant(
+ caseQuery?: CaseQuery
+): AxiosPromise {
+ return request({
+ url: root_path + "queryCaseByDefendant",
+ method: "get",
+ params: caseQuery,
+ paramsSerializer: function (params) {
+ return qs.stringify(params, { arrayFormat: "repeat" });
+ },
+ });
+}
+
+export function udpateCaseStatus(
+ caseBatchVO?: CaseBatchVO
+): AxiosPromise {
+ return request({
+ url: root_path + "updateCaseStatus",
+ method: "post",
+ data: caseBatchVO,
+ });
+}
+
+/**
+ * 获取所有案件材料
+ *
+ * @param pageQuery
+ */
+export function listCaseMaterials(
+ casePageVO?: CasePageVO
+): AxiosPromise {
+ return request({
+ url: root_path + "listCaseMaterials",
+ method: "get",
+ params: casePageVO,
+ });
+}
+
+/**
+ * 获取所有上传的附件材料
+ *
+ */
+export function listCaseAttachments(
+ casePageVO?: CasePageVO
+): AxiosPromise {
+ return request({
+ url: root_path + "listCaseAttachments",
+ method: "get",
+ params: casePageVO,
+ });
+}
+
+export function submitCase(rpaCaseVO?: RpaCaseVO): AxiosPromise {
+ return request({
+ url: root_path + "submitCase",
+ method: "post",
+ data: rpaCaseVO,
+ });
+}
+
+export function getCaseInfo(id: string) {
+ return request({
+ url: root_path + id,
+ method: "get",
+ });
+}
+
+export function getAsyncData(id: number): AxiosPromise {
+ return request({
+ url: root_path + "listAsyncLoadedData/" + id,
+ method: "get",
+ });
+}
+
+// 批量退案接口
+export function batchDelete(params: any): AxiosPromise