Compare commits
328 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
b3f916639a | |
|
|
2979bd99c1 | |
|
|
8b2b93c92c | |
|
|
1072541927 | |
|
|
69444994ad | |
|
|
983ac71559 | |
|
|
361f4d8d15 | |
|
|
08abd54ca0 | |
|
|
f4b2cc4569 | |
|
|
ba6ac7a420 | |
|
|
bc25430fa5 | |
|
|
3f779091be | |
|
|
cb9400e93d | |
|
|
9c95bebc26 | |
|
|
e566d9f60a | |
|
|
e58fe91a29 | |
|
|
0970806dca | |
|
|
a57df0b2de | |
|
|
2c4b6a65c8 | |
|
|
950850529d | |
|
|
63dfc5e2c3 | |
|
|
4aba1f9ddb | |
|
|
026f7e9b10 | |
|
|
18ed1cdfed | |
|
|
3208a76868 | |
|
|
e55613edc6 | |
|
|
2ea2d9b18f | |
|
|
3d37515cfc | |
|
|
fb94d37f5f | |
|
|
fe69fd7d94 | |
|
|
774a9f24fc | |
|
|
b0dcc7c840 | |
|
|
a5299ef2e8 | |
|
|
b6e13c59c7 | |
|
|
2172415cad | |
|
|
dcafe6efdc | |
|
|
61c9e1acf2 | |
|
|
ab2fa4e6b8 | |
|
|
fc7cd7bc07 | |
|
|
e5bba07dec | |
|
|
68c5f3fc4b | |
|
|
07c8f143ea | |
|
|
8ba76813ae | |
|
|
ddafacf64d | |
|
|
cb625d11bb | |
|
|
4879c4705f | |
|
|
37e964dc91 | |
|
|
9552a3cd2e | |
|
|
2685bc357f | |
|
|
cf85fd4c86 | |
|
|
9b416c722c | |
|
|
44136d310b | |
|
|
8c796950f9 | |
|
|
8b2dcc2b99 | |
|
|
e61581eef2 | |
|
|
61c71b9a0e | |
|
|
067c99aec8 | |
|
|
827665dd50 | |
|
|
17428e9867 | |
|
|
05d6196780 | |
|
|
74aaa6605e | |
|
|
7ea5cf5589 | |
|
|
394a3d075a | |
|
|
caa6fa9be3 | |
|
|
849f33c5a1 | |
|
|
a08bdab7eb | |
|
|
5f5702ab17 | |
|
|
70f683fda2 | |
|
|
a4f8760415 | |
|
|
9bcffb8b38 | |
|
|
8f24a79444 | |
|
|
0e46f09779 | |
|
|
69cd0b7875 | |
|
|
ba5c378a00 | |
|
|
d1cb99c74a | |
|
|
b46b1647eb | |
|
|
2f7ec5b78f | |
|
|
89a49cf19c | |
|
|
763e11eb78 | |
|
|
664904bd06 | |
|
|
811b93d9f1 | |
|
|
e1b8370267 | |
|
|
a4dfb717aa | |
|
|
f3807e30d5 | |
|
|
8b06efe5ee | |
|
|
309a4bf4d0 | |
|
|
2ede2b371f | |
|
|
00f273ca77 | |
|
|
72d8c499a4 | |
|
|
38ecc4f40c | |
|
|
9893aedbb2 | |
|
|
5a983bb1eb | |
|
|
fead282395 | |
|
|
73aa578c9b | |
|
|
7a236b4378 | |
|
|
1015423431 | |
|
|
3949e0c89f | |
|
|
29b257b8cd | |
|
|
1e08e9fbca | |
|
|
69653163b0 | |
|
|
8468d9bf4d | |
|
|
f7cda1fc4e | |
|
|
b63492199a | |
|
|
c6b6e723e0 | |
|
|
0a07d4a2e4 | |
|
|
fc812aef26 | |
|
|
30b963149a | |
|
|
9a36cfe933 | |
|
|
94e5fc00ac | |
|
|
2442a01e48 | |
|
|
bfd407d75b | |
|
|
b6d123ac72 | |
|
|
5ebbbf7499 | |
|
|
b52ad0c34b | |
|
|
5c2ee259a6 | |
|
|
8329a6a885 | |
|
|
f58d1d88c8 | |
|
|
12a41da241 | |
|
|
ae7f3a8bc5 | |
|
|
b9b085f1ee | |
|
|
dc318c8e75 | |
|
|
6cd49f0ce4 | |
|
|
85207bec98 | |
|
|
5d222bdf48 | |
|
|
03d0ce800d | |
|
|
68922ebf02 | |
|
|
e629ac3825 | |
|
|
8b4351e4f3 | |
|
|
b455ce4949 | |
|
|
4a811fb0bb | |
|
|
e579a4de13 | |
|
|
a170ae37ab | |
|
|
841d2cb763 | |
|
|
18e5c97bf3 | |
|
|
38cb980ce4 | |
|
|
750f25410c | |
|
|
e12596ad7c | |
|
|
2935d7d112 | |
|
|
46b06b0444 | |
|
|
70e7a1c900 | |
|
|
c5b082ca80 | |
|
|
dfd5b39a17 | |
|
|
312df4c73d | |
|
|
40ac2daca8 | |
|
|
094ab44094 | |
|
|
9eb221e8d2 | |
|
|
5b85a4c469 | |
|
|
7fa1dbc55c | |
|
|
cc93b8a742 | |
|
|
0b07091e79 | |
|
|
0323566878 | |
|
|
82d065c270 | |
|
|
cf01143632 | |
|
|
9bcdc92806 | |
|
|
f5936a6e7f | |
|
|
d175fe86be | |
|
|
ce66a507ef | |
|
|
65d5aacac9 | |
|
|
808ad575fc | |
|
|
cb26df3ca1 | |
|
|
b2ba42049b | |
|
|
f746aebe08 | |
|
|
0eca952c6a | |
|
|
a98e32554c | |
|
|
2f513f7b8f | |
|
|
8eebfd4744 | |
|
|
1ed5dc7e6a | |
|
|
8fc5273a88 | |
|
|
3be0daf115 | |
|
|
4868d69ed8 | |
|
|
1ac0650984 | |
|
|
30d695d702 | |
|
|
459eaa5428 | |
|
|
59aab8ecdc | |
|
|
b17f7a57e5 | |
|
|
957a63f8f4 | |
|
|
c15d75ba91 | |
|
|
3836467481 | |
|
|
f3de29f95f | |
|
|
8f2eddea4a | |
|
|
f8cc9d14d9 | |
|
|
5bd99c53c2 | |
|
|
c653c2fa2b | |
|
|
4e181564b8 | |
|
|
a9f54fdee1 | |
|
|
055d4bab27 | |
|
|
e48316231c | |
|
|
390b66aee8 | |
|
|
7b4c7028a0 | |
|
|
4d006f8e73 | |
|
|
dd75c702db | |
|
|
2a55748296 | |
|
|
1400bd80dd | |
|
|
14e3f85cb0 | |
|
|
9fc25b7109 | |
|
|
45bac49ec0 | |
|
|
b242b017c0 | |
|
|
cfd152addf | |
|
|
7618d58a66 | |
|
|
5c2a185ff9 | |
|
|
42566d1e86 | |
|
|
7141e431e2 | |
|
|
1b51926b19 | |
|
|
63c4dd1096 | |
|
|
b6ca1187b1 | |
|
|
89ee5d51ea | |
|
|
5b9acb4813 | |
|
|
0e979a9f67 | |
|
|
ce2cdc112f | |
|
|
1469d8bb3d | |
|
|
f86cd30af4 | |
|
|
bf79e07d5c | |
|
|
7c129c18c4 | |
|
|
01e0e8e37b | |
|
|
ffb69063b9 | |
|
|
43372c05ad | |
|
|
fa27c27831 | |
|
|
3146f64edc | |
|
|
fbd8615398 | |
|
|
52fdf0bcab | |
|
|
43666dc56c | |
|
|
ef901b5381 | |
|
|
cfeee7bbb7 | |
|
|
1dfab43b8a | |
|
|
744229a02e | |
|
|
63c711f9e2 | |
|
|
82022b86de | |
|
|
f5656c8a2f | |
|
|
31dc1b1198 | |
|
|
3cc7ac7f8b | |
|
|
7ed6fa5579 | |
|
|
8564788b11 | |
|
|
92b1466597 | |
|
|
238862b572 | |
|
|
be654bce50 | |
|
|
d64a695673 | |
|
|
dfbae06afa | |
|
|
384a0c134a | |
|
|
9f1fc9ef78 | |
|
|
fd1ba30bdb | |
|
|
01fff53aaf | |
|
|
4b4c4fab11 | |
|
|
368b385267 | |
|
|
0ab8b292f2 | |
|
|
d19bdd42d5 | |
|
|
0c7d1f0df6 | |
|
|
a762dfff84 | |
|
|
4b64153044 | |
|
|
e90f9e5237 | |
|
|
de39bc7fc1 | |
|
|
f0fc144e8a | |
|
|
431a0bfb93 | |
|
|
ba34e4adc0 | |
|
|
29a03ef03d | |
|
|
122b1ba748 | |
|
|
56b0630847 | |
|
|
6ead932813 | |
|
|
9fc10b304c | |
|
|
4c8898b6f5 | |
|
|
9c5b11e551 | |
|
|
e9be6ef8b3 | |
|
|
29695b649a | |
|
|
8847cdb79f | |
|
|
bfa267120a | |
|
|
8fd21da555 | |
|
|
9e8d04249c | |
|
|
cb5d30e327 | |
|
|
ccc9aca21c | |
|
|
fc82ed3d7e | |
|
|
cba5c15604 | |
|
|
678c2d6834 | |
|
|
3ea04663f2 | |
|
|
a0ed0d800c | |
|
|
45a530e8c7 | |
|
|
6add0b0600 | |
|
|
7f84c428a5 | |
|
|
e85f8edcaa | |
|
|
115e0482db | |
|
|
a1a9053aaa | |
|
|
1a0c11f685 | |
|
|
e1b52be8ea | |
|
|
8790d6b128 | |
|
|
3a77001b42 | |
|
|
8a7991261f | |
|
|
1e02a40ec4 | |
|
|
9570f25cdc | |
|
|
d37af6d959 | |
|
|
802a10cf85 | |
|
|
a973406b2a | |
|
|
43771b0f47 | |
|
|
20c6631e7a | |
|
|
9a4e79e4ef | |
|
|
f1d44c8267 | |
|
|
969d8237ce | |
|
|
f929ebc184 | |
|
|
2c1ff59286 | |
|
|
e573462cb7 | |
|
|
8c1f17f5a6 | |
|
|
a35698fc07 | |
|
|
66514fc597 | |
|
|
2785e2bea6 | |
|
|
e30e30ea51 | |
|
|
505b3b5953 | |
|
|
a28694074e | |
|
|
d6f96a56a2 | |
|
|
68d3ad10d4 | |
|
|
5f16cd74e0 | |
|
|
6664afb851 | |
|
|
6d6515c06d | |
|
|
76be404c69 | |
|
|
9fb796194e | |
|
|
518851ce74 | |
|
|
d599ca91c6 | |
|
|
5c1bb25237 | |
|
|
e5b90372a6 | |
|
|
5feb3e6815 | |
|
|
755bf1bb08 | |
|
|
0d347643ca | |
|
|
f3968db2e0 | |
|
|
90461a8cdf | |
|
|
d8d3366687 | |
|
|
90619542c8 | |
|
|
71d294ee29 | |
|
|
860d3131ae | |
|
|
d2a212fb80 | |
|
|
aaba03d001 | |
|
|
5b8b51a894 | |
|
|
e3f8a3a94b |
5
.env.dev
5
.env.dev
|
|
@ -21,6 +21,9 @@ VITE_DROP_CONSOLE=false
|
|||
# 是否sourcemap
|
||||
VITE_SOURCEMAP=true
|
||||
|
||||
# 是否开启压缩,可以设置为 none, gzip, brotli, gzip,brotli
|
||||
VITE_COMPRESS=none
|
||||
|
||||
# 打包路径
|
||||
VITE_BASE_PATH=/
|
||||
|
||||
|
|
@ -34,4 +37,4 @@ VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
|||
VITE_APP_CAPTCHA_ENABLE=true
|
||||
|
||||
# GoView域名
|
||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@ VITE_DROP_CONSOLE=false
|
|||
# 是否sourcemap
|
||||
VITE_SOURCEMAP=false
|
||||
|
||||
# 是否开启压缩,可以设置为 none, gzip, brotli, gzip,brotli
|
||||
VITE_COMPRESS=none
|
||||
|
||||
# 打包路径
|
||||
VITE_BASE_PATH=/
|
||||
|
||||
|
|
@ -31,4 +34,4 @@ VITE_MALL_H5_DOMAIN='http://localhost:3000'
|
|||
VITE_APP_CAPTCHA_ENABLE=false
|
||||
|
||||
# GoView域名
|
||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@ VITE_DROP_CONSOLE=true
|
|||
# 是否sourcemap
|
||||
VITE_SOURCEMAP=false
|
||||
|
||||
# 是否开启压缩,可以设置为 none, gzip, brotli, gzip,brotli
|
||||
VITE_COMPRESS=none
|
||||
|
||||
# 打包路径
|
||||
VITE_BASE_PATH=/
|
||||
|
||||
|
|
@ -31,4 +34,4 @@ VITE_OUT_DIR=dist-prod
|
|||
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
||||
|
||||
# GoView域名
|
||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||
|
|
|
|||
|
|
@ -7,3 +7,5 @@ pnpm-debug
|
|||
auto-*.d.ts
|
||||
.idea
|
||||
.history
|
||||
output/
|
||||
.playwright-cli/
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 169 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 72 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 62 KiB |
|
|
@ -7,5 +7,6 @@
|
|||
/src/types/env.d.ts
|
||||
/src/types/auto-components.d.ts
|
||||
/src/types/auto-imports.d.ts
|
||||
/src/components/Tinyflow/ui/**
|
||||
/docs/**/*
|
||||
CHANGELOG
|
||||
|
|
|
|||
|
|
@ -3,4 +3,5 @@
|
|||
public/*
|
||||
/dist*
|
||||
/src/types/env.d.ts
|
||||
/src/components/Tinyflow/ui/**
|
||||
/docs/**/*
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
{
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
"typescript.tsdk": "./node_modules/typescript/lib",
|
||||
"volar.tsPlugin": true,
|
||||
"volar.tsPluginStatus": false,
|
||||
"npm.packageManager": "pnpm",
|
||||
"editor.tabSize": 2,
|
||||
"prettier.printWidth": 100, // 超过最大值换行
|
||||
|
|
@ -83,54 +85,75 @@
|
|||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.fixAll.stylelint": "explicit"
|
||||
"source.fixAll.eslint": "explicit"
|
||||
},
|
||||
"editor.formatOnSave": true,
|
||||
"[vue]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.fixAll.stylelint": "explicit"
|
||||
}
|
||||
},
|
||||
"i18n-ally.localesPaths": ["src/locales"],
|
||||
"i18n-ally.keystyle": "nested",
|
||||
"i18n-ally.sortKeys": true,
|
||||
"i18n-ally.namespace": false,
|
||||
"i18n-ally.namespace": true,
|
||||
"i18n-ally.enabledParsers": ["ts"],
|
||||
"i18n-ally.sourceLanguage": "en",
|
||||
"i18n-ally.displayLanguage": "zh-CN",
|
||||
"i18n-ally.enabledFrameworks": ["vue", "react"],
|
||||
"cSpell.words": [
|
||||
"brotli",
|
||||
"browserslist",
|
||||
"codemirror",
|
||||
"commitlint",
|
||||
"cropperjs",
|
||||
"echart",
|
||||
"echarts",
|
||||
"esnext",
|
||||
"esno",
|
||||
"iconify",
|
||||
"INTLIFY",
|
||||
"lintstagedrc",
|
||||
"logicflow",
|
||||
"nprogress",
|
||||
"pinia",
|
||||
"pnpm",
|
||||
"qrcode",
|
||||
"sider",
|
||||
"sortablejs",
|
||||
"stylelint",
|
||||
"svgs",
|
||||
"unocss",
|
||||
"unplugin",
|
||||
"unref",
|
||||
"videojs",
|
||||
"VITE",
|
||||
"vitejs",
|
||||
"vueuse",
|
||||
"wangeditor",
|
||||
"xingyu",
|
||||
"yudao",
|
||||
"zxcvbn"
|
||||
"unocss",
|
||||
"browserslist",
|
||||
"esnext",
|
||||
"unplugin",
|
||||
"qrcode",
|
||||
"sider",
|
||||
"pinia",
|
||||
"sider",
|
||||
"nprogress",
|
||||
"INTLIFY",
|
||||
"stylelint",
|
||||
"esno",
|
||||
"vitejs",
|
||||
"sortablejs",
|
||||
"codemirror",
|
||||
"iconify",
|
||||
"commitlint",
|
||||
"videojs",
|
||||
"echarts",
|
||||
"wangeditor",
|
||||
"cropperjs",
|
||||
"logicflow",
|
||||
"vueuse",
|
||||
"zxcvbn",
|
||||
"lintstagedrc",
|
||||
"brotli",
|
||||
"sider",
|
||||
"pnpm"
|
||||
],
|
||||
"vetur.format.scriptInitialIndent": true,
|
||||
"vetur.format.styleInitialIndent": true,
|
||||
"vetur.validation.script": false,
|
||||
"MicroPython.executeButton": [
|
||||
{
|
||||
"text": "▶",
|
||||
"tooltip": "运行",
|
||||
"alignment": "left",
|
||||
"command": "extension.executeFile",
|
||||
"priority": 3.5
|
||||
}
|
||||
],
|
||||
"MicroPython.syncButton": [
|
||||
{
|
||||
"text": "$(sync)",
|
||||
"tooltip": "同步",
|
||||
"alignment": "left",
|
||||
"command": "extension.execute",
|
||||
"priority": 4
|
||||
}
|
||||
],
|
||||
// 控制相关文件嵌套展示
|
||||
"explorer.fileNesting.enabled": true,
|
||||
|
|
@ -139,8 +162,7 @@
|
|||
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
|
||||
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
|
||||
"*.env": "$(capture).env.*",
|
||||
"package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.eslintrc-auto-import.json,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
|
||||
"package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
|
||||
},
|
||||
"terminal.integrated.scrollback": 10000,
|
||||
"nuxt.isNuxtApp": false
|
||||
"terminal.integrated.scrollback": 10000
|
||||
}
|
||||
|
|
|
|||
13
README.md
13
README.md
|
|
@ -284,6 +284,19 @@
|
|||
|
||||

|
||||
|
||||
### IM 即时通讯
|
||||
|
||||
演示地址(Vue3 + Element Plus):<http://dashboard-vue3.yudao.iocoder.cn>
|
||||
|
||||
使用文档:<https://doc.iocoder.cn/im-preview/>
|
||||
|
||||
|
||||

|
||||
|
||||
| 聊天界面 | 聊天管理 |
|
||||
| --- | --- |
|
||||
|  |  |
|
||||
|
||||
## 🐷 演示图
|
||||
|
||||
### 系统功能
|
||||
|
|
|
|||
|
|
@ -1,33 +1,31 @@
|
|||
import { resolve } from 'path'
|
||||
import Vue from '@vitejs/plugin-vue'
|
||||
import VueJsx from '@vitejs/plugin-vue-jsx'
|
||||
import progress from 'vite-plugin-progress'
|
||||
import EslintPlugin from 'vite-plugin-eslint2'
|
||||
import { ViteEjsPlugin } from 'vite-plugin-ejs'
|
||||
// @ts-ignore
|
||||
import ElementPlus from 'unplugin-element-plus/vite'
|
||||
import AutoImport from 'unplugin-auto-import/vite'
|
||||
import Components from 'unplugin-vue-components/vite'
|
||||
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
|
||||
import viteCompression from 'vite-plugin-compression'
|
||||
import topLevelAwait from 'vite-plugin-top-level-await'
|
||||
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
|
||||
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons-ng'
|
||||
import UnoCSS from 'unocss/vite'
|
||||
|
||||
export function createVitePlugins() {
|
||||
export function createVitePlugins(isBuild = false, env: Record<string, string> = {}) {
|
||||
const root = process.cwd()
|
||||
const compressTypes = (env.VITE_COMPRESS || '')
|
||||
.split(',')
|
||||
.map((item) => item.trim())
|
||||
.filter((item) => item === 'gzip' || item === 'brotli')
|
||||
|
||||
// 路径查找
|
||||
function pathResolve(dir: string) {
|
||||
return resolve(root, '.', dir)
|
||||
}
|
||||
|
||||
return [
|
||||
const plugins = [
|
||||
Vue(),
|
||||
VueJsx(),
|
||||
UnoCSS(),
|
||||
progress(),
|
||||
ElementPlus({}),
|
||||
AutoImport({
|
||||
include: [
|
||||
|
|
@ -49,7 +47,7 @@ export function createVitePlugins() {
|
|||
'@/utils/dict': ['DICT_TYPE']
|
||||
}
|
||||
],
|
||||
dts: 'src/types/auto-imports.d.ts',
|
||||
dts: !isBuild && 'src/types/auto-imports.d.ts',
|
||||
resolvers: [ElementPlusResolver()],
|
||||
eslintrc: {
|
||||
enabled: false, // Default `false`
|
||||
|
|
@ -59,25 +57,16 @@ export function createVitePlugins() {
|
|||
}),
|
||||
Components({
|
||||
// 生成自定义 `auto-components.d.ts` 全局声明
|
||||
dts: 'src/types/auto-components.d.ts',
|
||||
dts: !isBuild && 'src/types/auto-components.d.ts',
|
||||
// 自定义组件的解析器
|
||||
resolvers: [ElementPlusResolver()],
|
||||
globs: ['src/components/**/**.{vue, md}', '!src/components/DiyEditor/components/mobile/**']
|
||||
}),
|
||||
EslintPlugin({
|
||||
cache: false,
|
||||
include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
|
||||
}),
|
||||
VueI18nPlugin({
|
||||
runtimeOnly: true,
|
||||
compositionOnly: true,
|
||||
include: [resolve(__dirname, 'src/locales/**')]
|
||||
}),
|
||||
createSvgIconsPlugin({
|
||||
iconDirs: [pathResolve('src/assets/svgs')],
|
||||
symbolId: 'icon-[dir]-[name]'
|
||||
}),
|
||||
viteCompression({
|
||||
isBuild && compressTypes.includes('gzip') && viteCompression({
|
||||
verbose: true, // 是否在控制台输出压缩结果
|
||||
disable: false, // 是否禁用
|
||||
threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
|
||||
|
|
@ -85,13 +74,15 @@ export function createVitePlugins() {
|
|||
ext: '.gz', // 生成的压缩包后缀
|
||||
deleteOriginFile: false //压缩后是否删除源文件
|
||||
}),
|
||||
ViteEjsPlugin(),
|
||||
topLevelAwait({
|
||||
// https://juejin.cn/post/7152191742513512485
|
||||
// The export name of top-level await promise for each chunk module
|
||||
promiseExportName: '__tla',
|
||||
// The function to generate import names of top-level await promise in each chunk module
|
||||
promiseImportName: (i) => `__tla_${i}`
|
||||
isBuild && compressTypes.includes('brotli') && viteCompression({
|
||||
verbose: true,
|
||||
disable: false,
|
||||
threshold: 10240,
|
||||
algorithm: 'brotliCompress',
|
||||
ext: '.br',
|
||||
deleteOriginFile: false
|
||||
})
|
||||
]
|
||||
|
||||
return plugins.filter(Boolean)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ export default tseslint.config(
|
|||
'test/unit/coverage/',
|
||||
'node_modules/',
|
||||
'src/main.ts',
|
||||
'src/types/auto-components.d.ts'
|
||||
'src/types/auto-components.d.ts',
|
||||
'src/components/Tinyflow/ui/**'
|
||||
]
|
||||
},
|
||||
|
||||
|
|
@ -61,6 +62,7 @@ export default tseslint.config(
|
|||
'vue/attributes-order': 'off',
|
||||
'vue/one-component-per-file': 'off',
|
||||
'vue/html-closing-bracket-newline': 'off',
|
||||
'vue/html-indent': 'off', // Vue 模板缩进交给 Prettier,避免格式化规则互相拉扯。
|
||||
'vue/max-attributes-per-line': 'off',
|
||||
'vue/multiline-html-element-content-newline': 'off',
|
||||
'vue/singleline-html-element-content-newline': 'off',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
export default {
|
||||
'src/**/*.{js,ts,tsx,vue}': [
|
||||
'eslint --fix --cache --cache-location node_modules/.cache/eslint/',
|
||||
'prettier --write --loglevel warn --cache --cache-location node_modules/.cache/prettier/.prettier-cache'
|
||||
],
|
||||
'src/**/*.{css,less,scss,postcss,vue}': [
|
||||
'stylelint --fix --cache --cache-location node_modules/.cache/stylelint/'
|
||||
],
|
||||
'src/**/*.{json,html,md}': [
|
||||
'prettier --write --loglevel warn --cache --cache-location node_modules/.cache/prettier/.prettier-cache'
|
||||
]
|
||||
}
|
||||
21
package.json
21
package.json
|
|
@ -8,7 +8,7 @@
|
|||
"i": "pnpm install",
|
||||
"dev": "vite --mode env.local",
|
||||
"dev-server": "vite --mode dev",
|
||||
"ts:check": "node --max_old_space_size=8192 ./node_modules/vue-tsc/bin/vue-tsc.js --noEmit",
|
||||
"ts:check": "node --max_old_space_size=8192 ./node_modules/vue-tsc/bin/vue-tsc.js --noEmit --incremental --tsBuildInfoFile node_modules/.cache/vue-tsc/tsconfig.tsbuildinfo",
|
||||
"build:local": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode env.local",
|
||||
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
|
||||
"build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test",
|
||||
|
|
@ -19,10 +19,14 @@
|
|||
"preview": "pnpm build:local && vite preview",
|
||||
"clean": "npx rimraf node_modules",
|
||||
"clean:cache": "npx rimraf node_modules/.cache",
|
||||
"lint:eslint": "eslint --fix ./src",
|
||||
"lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
|
||||
"lint": "pnpm lint:eslint:check && pnpm lint:style:check && pnpm lint:format:check",
|
||||
"lint:eslint": "eslint --fix ./src --cache --cache-location node_modules/.cache/eslint/",
|
||||
"lint:eslint:check": "eslint ./src --cache --cache-location node_modules/.cache/eslint/",
|
||||
"lint:format": "prettier --write --log-level warn --cache --cache-location node_modules/.cache/prettier/.prettier-cache \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
|
||||
"lint:format:check": "prettier --check --cache --cache-location node_modules/.cache/prettier/.prettier-cache \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
|
||||
"lint:style": "stylelint --fix \"./src/**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
|
||||
"lint:lint-staged": "lint-staged -c "
|
||||
"lint:style:check": "stylelint \"./src/**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
|
||||
"lint:lint-staged": "lint-staged"
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "2.3.2",
|
||||
|
|
@ -44,7 +48,6 @@
|
|||
"cropperjs": "^2.1.1",
|
||||
"crypto-js": "^4.2.0",
|
||||
"dayjs": "^1.11.20",
|
||||
"dayjs-plugin-lunar": "^1.4.1",
|
||||
"dhtmlx-gantt": "^9.1.1",
|
||||
"diagram-js": "^15.14.0",
|
||||
"driver.js": "^1.4.0",
|
||||
|
|
@ -56,6 +59,7 @@
|
|||
"jsbarcode": "^3.12.3",
|
||||
"jsencrypt": "^3.5.4",
|
||||
"jsoneditor": "^10.4.3",
|
||||
"livekit-client": "^2.18.9",
|
||||
"lodash-es": "^4.18.1",
|
||||
"markdown-it": "^14.1.1",
|
||||
"markmap-common": "^0.18.9",
|
||||
|
|
@ -90,7 +94,6 @@
|
|||
"@commitlint/cli": "^20.5.3",
|
||||
"@commitlint/config-conventional": "^20.5.3",
|
||||
"@iconify/json": "^2.2.470",
|
||||
"@intlify/unplugin-vue-i18n": "^11.1.2",
|
||||
"@types/jsoneditor": "^9.9.6",
|
||||
"@types/lodash-es": "^4.17.12",
|
||||
"@types/node": "^25.6.0",
|
||||
|
|
@ -100,7 +103,6 @@
|
|||
"@unocss/eslint-config": "^66.6.8",
|
||||
"@unocss/eslint-plugin": "66.6.8",
|
||||
"@unocss/transformer-variant-group": "^66.6.8",
|
||||
"@vitejs/plugin-legacy": "^8.0.1",
|
||||
"@vitejs/plugin-vue": "^6.0.6",
|
||||
"@vitejs/plugin-vue-jsx": "^5.1.5",
|
||||
"autoprefixer": "^10.5.0",
|
||||
|
|
@ -123,7 +125,6 @@
|
|||
"stylelint-config-recommended": "^18.0.0",
|
||||
"stylelint-config-standard": "^40.0.0",
|
||||
"stylelint-order": "^8.1.1",
|
||||
"terser": "^5.46.2",
|
||||
"typescript": "6.0.3",
|
||||
"typescript-eslint": "^8.59.2",
|
||||
"unocss": "^66.6.8",
|
||||
|
|
@ -132,11 +133,7 @@
|
|||
"unplugin-vue-components": "^32.0.0",
|
||||
"vite": "8.0.10",
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"vite-plugin-ejs": "^1.7.0",
|
||||
"vite-plugin-eslint2": "^5.1.0",
|
||||
"vite-plugin-progress": "^0.0.7",
|
||||
"vite-plugin-svg-icons-ng": "^1.9.0",
|
||||
"vite-plugin-top-level-await": "^1.6.0",
|
||||
"vue-eslint-parser": "^10.4.0",
|
||||
"vue-tsc": "^3.2.8"
|
||||
},
|
||||
|
|
|
|||
2262
pnpm-lock.yaml
2262
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
|
@ -12,7 +12,7 @@ export interface ChatConversationVO {
|
|||
temperature: number // 温度参数
|
||||
maxTokens: number // 单条回复的最大 Token 数量
|
||||
maxContexts: number // 上下文的最大 Message 数量
|
||||
createTime?: Date // 创建时间
|
||||
createTime: Date // 创建时间
|
||||
// 额外字段
|
||||
systemMessage?: string // 角色设定
|
||||
modelName?: string // 模型名字
|
||||
|
|
@ -39,7 +39,7 @@ export const ChatConversationApi = {
|
|||
},
|
||||
|
||||
// 删除【我的】聊天对话
|
||||
deleteChatConversationMy: async (id: string) => {
|
||||
deleteChatConversationMy: async (id: number) => {
|
||||
return await request.delete({ url: `/ai/chat/conversation/delete-my?id=${id}` })
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -23,15 +23,15 @@ export interface ImageDrawReqVO {
|
|||
prompt: string // 提示词
|
||||
modelId: number // 模型
|
||||
style: string // 图像生成的风格
|
||||
width: string // 图片宽度
|
||||
height: string // 图片高度
|
||||
width: number // 图片宽度
|
||||
height: number // 图片高度
|
||||
options: object // 绘制参数,Map<String, String>
|
||||
}
|
||||
|
||||
export interface ImageMidjourneyImagineReqVO {
|
||||
prompt: string // 提示词
|
||||
modelId: number // 模型
|
||||
base64Array: string[] // size不能为空
|
||||
base64Array: string[] // 参考图 base64 列表
|
||||
width: string // 图片宽度
|
||||
height: string // 图片高度
|
||||
version: string // 版本
|
||||
|
|
|
|||
|
|
@ -39,4 +39,4 @@ export const ProcessExpressionApi = {
|
|||
exportProcessExpression: async (params) => {
|
||||
return await request.download({ url: `/bpm/process-expression/export-excel`, params })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ export type ApprovalTaskInfo = {
|
|||
assigneeUser: User
|
||||
status: number
|
||||
reason: string
|
||||
attachments?: string[]
|
||||
signPicUrl: string
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
|
||||
export const updateBpmSimpleModel = async (data) => {
|
||||
return await request.post({
|
||||
url: '/bpm/model/simple/update',
|
||||
|
|
|
|||
|
|
@ -1,14 +1,18 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface BusinessStatusTypeVO {
|
||||
id: number
|
||||
id?: number
|
||||
name: string
|
||||
deptIds: number[]
|
||||
statuses?: {
|
||||
id: number
|
||||
name: string
|
||||
percent: number
|
||||
}
|
||||
statuses: BusinessStatusVO[]
|
||||
}
|
||||
|
||||
export interface BusinessStatusVO {
|
||||
id?: number
|
||||
name: string
|
||||
percent?: number
|
||||
endStatus?: number
|
||||
key?: string
|
||||
}
|
||||
|
||||
export const DEFAULT_STATUSES = [
|
||||
|
|
@ -30,7 +34,7 @@ export const DEFAULT_STATUSES = [
|
|||
name: '无效',
|
||||
percent: 0
|
||||
}
|
||||
]
|
||||
] satisfies BusinessStatusVO[]
|
||||
|
||||
// 查询商机状态组列表
|
||||
export const getBusinessStatusPage = async (params: any) => {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,11 @@ export interface FinancePaymentVO {
|
|||
remark: string // 备注
|
||||
}
|
||||
|
||||
// ERP 付款单项 VO
|
||||
export interface FinancePaymentItemVO {
|
||||
paymentPrice: number // 本次付款金额,单位:元
|
||||
}
|
||||
|
||||
// ERP 付款单 API
|
||||
export const FinancePaymentApi = {
|
||||
// 查询付款单分页
|
||||
|
|
|
|||
|
|
@ -11,6 +11,11 @@ export interface FinanceReceiptVO {
|
|||
remark: string // 备注
|
||||
}
|
||||
|
||||
// ERP 收款单项 VO
|
||||
export interface FinanceReceiptItemVO {
|
||||
receiptPrice: number // 本次收款金额,单位:元
|
||||
}
|
||||
|
||||
// ERP 收款单 API
|
||||
export const FinanceReceiptApi = {
|
||||
// 查询收款单分页
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ export interface ProductCategoryVO {
|
|||
// ERP 产品分类 API
|
||||
export const ProductCategoryApi = {
|
||||
// 查询产品分类列表
|
||||
getProductCategoryList: async () => {
|
||||
return await request.get({ url: `/erp/product-category/list` })
|
||||
getProductCategoryList: async (params?: any) => {
|
||||
return await request.get({ url: `/erp/product-category/list`, params })
|
||||
},
|
||||
|
||||
// 查询产品分类精简列表
|
||||
|
|
|
|||
|
|
@ -2,16 +2,45 @@ import request from '@/config/axios'
|
|||
|
||||
// ERP 采购订单 VO
|
||||
export interface PurchaseOrderVO {
|
||||
id: number // 订单工单编号
|
||||
no: string // 采购订单号
|
||||
customerId: number // 客户编号
|
||||
orderTime: Date // 订单时间
|
||||
totalCount: number // 合计数量
|
||||
id?: number // 订单工单编号
|
||||
no?: string // 采购订单号
|
||||
supplierId?: number // 供应商编号
|
||||
accountId?: number // 结算账户编号
|
||||
orderTime?: Date // 订单时间
|
||||
totalCount?: number // 合计数量
|
||||
totalProductPrice?: number // 合计产品金额,单位:元
|
||||
discountPercent?: number // 优惠率
|
||||
discountPrice?: number // 优惠金额,单位:元
|
||||
totalPrice: number // 合计金额,单位:元
|
||||
status: number // 状态
|
||||
remark: string // 备注
|
||||
outCount: number // 采购出库数量
|
||||
returnCount: number // 采购退货数量
|
||||
depositPrice?: number // 订金金额,单位:元
|
||||
status?: number // 状态
|
||||
remark?: string // 备注
|
||||
fileUrl: string // 附件地址
|
||||
inCount?: number // 采购入库数量
|
||||
returnCount?: number // 采购退货数量
|
||||
items: PurchaseOrderItemVO[] // 订单项
|
||||
}
|
||||
|
||||
// ERP 采购订单项 VO
|
||||
export interface PurchaseOrderItemVO {
|
||||
id?: number
|
||||
orderItemId?: number
|
||||
productId?: number
|
||||
productName?: string
|
||||
productUnitName?: string
|
||||
productBarCode?: string
|
||||
productPrice?: number
|
||||
stockCount?: number
|
||||
count: number
|
||||
totalCount?: number
|
||||
inCount?: number
|
||||
returnCount?: number
|
||||
totalProductPrice?: number
|
||||
taxPercent?: number
|
||||
taxPrice?: number
|
||||
totalPrice: number
|
||||
remark?: string
|
||||
warehouseId?: number
|
||||
}
|
||||
|
||||
// ERP 采购订单 API
|
||||
|
|
|
|||
|
|
@ -2,16 +2,46 @@ import request from '@/config/axios'
|
|||
|
||||
// ERP 销售订单 VO
|
||||
export interface SaleOrderVO {
|
||||
id: number // 订单工单编号
|
||||
no: string // 销售订单号
|
||||
customerId: number // 客户编号
|
||||
orderTime: Date // 订单时间
|
||||
totalCount: number // 合计数量
|
||||
id?: number // 订单工单编号
|
||||
no?: string // 销售订单号
|
||||
customerId?: number // 客户编号
|
||||
accountId?: number // 结算账户编号
|
||||
saleUserId?: number // 销售人员编号
|
||||
orderTime?: Date // 订单时间
|
||||
totalCount?: number // 合计数量
|
||||
totalProductPrice?: number // 合计产品金额,单位:元
|
||||
discountPercent?: number // 优惠率
|
||||
discountPrice?: number // 优惠金额,单位:元
|
||||
totalPrice: number // 合计金额,单位:元
|
||||
status: number // 状态
|
||||
remark: string // 备注
|
||||
outCount: number // 销售出库数量
|
||||
returnCount: number // 销售退货数量
|
||||
depositPrice?: number // 订金金额,单位:元
|
||||
status?: number // 状态
|
||||
remark?: string // 备注
|
||||
fileUrl: string // 附件地址
|
||||
outCount?: number // 销售出库数量
|
||||
returnCount?: number // 销售退货数量
|
||||
items: SaleOrderItemVO[] // 订单项
|
||||
}
|
||||
|
||||
// ERP 销售订单项 VO
|
||||
export interface SaleOrderItemVO {
|
||||
id?: number
|
||||
orderItemId?: number
|
||||
productId?: number
|
||||
productName?: string
|
||||
productUnitName?: string
|
||||
productBarCode?: string
|
||||
productPrice?: number
|
||||
stockCount?: number
|
||||
count: number
|
||||
totalCount?: number
|
||||
outCount?: number
|
||||
returnCount?: number
|
||||
totalProductPrice?: number
|
||||
taxPercent?: number
|
||||
taxPrice?: number
|
||||
totalPrice: number
|
||||
remark?: string
|
||||
warehouseId?: number
|
||||
}
|
||||
|
||||
// ERP 销售订单 API
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 用户端能看到的频道素材详情
|
||||
export interface ImChannelMaterialRespVO {
|
||||
id: number
|
||||
channelId: number
|
||||
type: number
|
||||
title: string
|
||||
coverUrl?: string
|
||||
summary?: string
|
||||
content?: string
|
||||
url?: string
|
||||
}
|
||||
|
||||
// 获取频道素材详情;用于客户端点击图文卡片渲染详情页
|
||||
export const getChannelMaterial = (id: number) => {
|
||||
return request.get<ImChannelMaterialRespVO>({ url: '/im/channel/material/get', params: { id } })
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// IM 会话读位置 Response VO
|
||||
export interface ImConversationReadRespVO {
|
||||
id: number // 读位置编号(增量拉取游标用)
|
||||
conversationType: number // 会话类型,参见 ImConversationType
|
||||
targetId: number // 会话目标编号
|
||||
messageId: number // 最大已读消息编号
|
||||
updateTime?: number // 最近更新时间(毫秒时间戳,增量拉取游标用)
|
||||
}
|
||||
|
||||
// 增量拉取当前用户的会话读位置(重连 / 离线补偿)
|
||||
export const pullMyConversationReadList = (params: {
|
||||
lastUpdateTime?: number
|
||||
lastId?: number
|
||||
limit: number
|
||||
}) => {
|
||||
return request.get<ImConversationReadRespVO[]>({ url: '/im/conversation-read/pull', params })
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 用户端表情包项(精简版)
|
||||
export interface ImFacePackUserItemVO {
|
||||
id: number
|
||||
url: string
|
||||
name?: string
|
||||
width: number
|
||||
height: number
|
||||
}
|
||||
|
||||
// 用户端表情包 + 嵌套 items
|
||||
export interface ImFacePackUserVO {
|
||||
id: number
|
||||
name: string
|
||||
icon?: string
|
||||
items: ImFacePackUserItemVO[]
|
||||
}
|
||||
|
||||
// 拉取所有启用的系统表情包(含表情列表)
|
||||
export const getFacePackList = () => {
|
||||
return request.get<ImFacePackUserVO[]>({ url: '/im/face-pack/list' })
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 个人表情
|
||||
export interface ImFaceUserItemVO {
|
||||
id: number
|
||||
url: string
|
||||
name?: string
|
||||
width: number
|
||||
height: number
|
||||
}
|
||||
|
||||
// 添加个人表情请求
|
||||
export interface ImFaceUserItemSaveReqVO {
|
||||
url: string
|
||||
name?: string
|
||||
width: number
|
||||
height: number
|
||||
}
|
||||
|
||||
// 获取我的个人表情列表
|
||||
export const getFaceUserItemList = () => {
|
||||
return request.get<ImFaceUserItemVO[]>({ url: '/im/face-user-item/list' })
|
||||
}
|
||||
|
||||
// 添加个人表情
|
||||
export const createFaceUserItem = (data: ImFaceUserItemSaveReqVO) => {
|
||||
return request.post<number>({ url: '/im/face-user-item/create', data })
|
||||
}
|
||||
|
||||
// 删除个人表情
|
||||
export const deleteFaceUserItem = (id: number) => {
|
||||
return request.delete({ url: '/im/face-user-item/delete', params: { id } })
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// IM 好友 Response VO
|
||||
export interface ImFriendRespVO {
|
||||
id: number // 关系记录编号
|
||||
friendUserId: number // 好友的用户编号
|
||||
silent?: boolean // 是否免打扰
|
||||
displayName?: string // 好友展示备注(仅自己可见)
|
||||
displayNamePinyin?: string // 备注的拼音(小写无空格,前端按首字母分桶 / 拼音搜索)
|
||||
addSource?: number // 添加来源;参见 ImFriendAddSourceEnum
|
||||
pinned?: boolean // 是否置顶联系人
|
||||
blocked?: boolean // 是否拉黑
|
||||
status?: number // 好友状态(0=正常,1=已删除)
|
||||
addTime?: string // 添加好友时间
|
||||
deleteTime?: string // 删除好友时间
|
||||
updateTime?: number // 最近更新时间(毫秒时间戳,增量拉取游标用)
|
||||
// 聚合字段(自 AdminUser)
|
||||
nickname?: string // 好友昵称
|
||||
nicknamePinyin?: string // 昵称的拼音(小写无空格,前端按首字母分桶 / 拼音搜索)
|
||||
avatar?: string // 好友头像
|
||||
}
|
||||
|
||||
// IM 好友更新 Request VO
|
||||
export interface ImFriendUpdateReqVO {
|
||||
friendUserId: number // 好友的用户编号
|
||||
silent?: boolean // 是否免打扰
|
||||
displayName?: string // 好友展示备注
|
||||
pinned?: boolean // 是否置顶联系人
|
||||
}
|
||||
|
||||
// 获得当前登录用户的好友列表
|
||||
export const getMyFriendList = () => {
|
||||
return request.get<ImFriendRespVO[]>({ url: '/im/friend/list' })
|
||||
}
|
||||
|
||||
// 增量拉取当前用户的好友关系(重连 / 离线补偿)
|
||||
export const pullMyFriendList = (params: {
|
||||
lastUpdateTime?: number
|
||||
lastId?: number
|
||||
limit: number
|
||||
}) => {
|
||||
return request.get<ImFriendRespVO[]>({ url: '/im/friend/pull', params })
|
||||
}
|
||||
|
||||
// 获得好友详情
|
||||
export const getFriend = (friendUserId: number | string) => {
|
||||
return request.get<ImFriendRespVO>({ url: '/im/friend/get', params: { friendUserId } })
|
||||
}
|
||||
|
||||
// 删除好友(单向软删除)
|
||||
export const deleteFriend = (friendUserId: number | string, clear: boolean) => {
|
||||
return request.delete<boolean>({
|
||||
url: '/im/friend/delete',
|
||||
params: { friendUserId, clear }
|
||||
})
|
||||
}
|
||||
|
||||
// 更新好友信息(备注 / 免打扰 / 联系人置顶)
|
||||
export const updateFriend = (data: ImFriendUpdateReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/friend/update', data })
|
||||
}
|
||||
|
||||
// 拉黑好友(必须先是好友;单边屏蔽对方私聊消息)
|
||||
export const blockFriend = (friendUserId: number | string) => {
|
||||
return request.put<boolean>({ url: '/im/friend/block', params: { friendUserId } })
|
||||
}
|
||||
|
||||
// 移出黑名单
|
||||
export const unblockFriend = (friendUserId: number | string) => {
|
||||
return request.put<boolean>({ url: '/im/friend/unblock', params: { friendUserId } })
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// IM 好友申请 Response VO
|
||||
export interface ImFriendRequestRespVO {
|
||||
id: number // 申请编号
|
||||
fromUserId: number // 发起方用户编号
|
||||
toUserId: number // 接收方用户编号
|
||||
handleResult: number // 处理结果;0=未处理;1=同意;2=拒绝
|
||||
applyContent?: string // 申请理由
|
||||
handleContent?: string // 处理理由(接收方拒绝时可选填)
|
||||
addSource?: number // 添加来源;参见 ImFriendAddSourceEnum
|
||||
handleTime?: string // 处理时间
|
||||
createTime: string // 申请创建时间
|
||||
updateTime?: number // 最近更新时间(毫秒时间戳,增量拉取游标用)
|
||||
// 聚合字段(自 AdminUser)
|
||||
fromNickname?: string // 发起方昵称
|
||||
fromAvatar?: string // 发起方头像
|
||||
toNickname?: string // 接收方昵称
|
||||
toAvatar?: string // 接收方头像
|
||||
}
|
||||
|
||||
// IM 好友申请发起 Request VO
|
||||
export interface ImFriendRequestApplyReqVO {
|
||||
toUserId: number // 接收方用户编号
|
||||
applyContent?: string // 申请理由
|
||||
displayName?: string // 对接收方的备注(仅自己可见)
|
||||
addSource?: number // 添加来源
|
||||
}
|
||||
|
||||
// 发起好友申请
|
||||
export const applyFriendRequest = (data: ImFriendRequestApplyReqVO) => {
|
||||
return request.post<number | null>({ url: '/im/friend-request/apply', data })
|
||||
}
|
||||
|
||||
// 同意好友申请
|
||||
export const agreeFriendRequest = (id: number | string) => {
|
||||
return request.put<boolean>({ url: '/im/friend-request/agree', params: { id } })
|
||||
}
|
||||
|
||||
// 拒绝好友申请
|
||||
export const refuseFriendRequest = (id: number | string, handleContent?: string) => {
|
||||
return request.put<boolean>({
|
||||
url: '/im/friend-request/refuse',
|
||||
params: { id, handleContent }
|
||||
})
|
||||
}
|
||||
|
||||
// 查询「我相关」的好友申请列表(游标分页:传 maxId 加载更多)
|
||||
export const getMyFriendRequestList = (limit: number, maxId?: number) => {
|
||||
const params: Record<string, number> = { limit }
|
||||
if (maxId != null) {
|
||||
params.maxId = maxId
|
||||
}
|
||||
return request.get<ImFriendRequestRespVO[]>({
|
||||
url: '/im/friend-request/list',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 增量拉取「我相关」的好友申请变更(重连 / 离线补偿)
|
||||
export const pullMyFriendRequestList = (params: {
|
||||
lastUpdateTime?: number
|
||||
lastId?: number
|
||||
limit: number
|
||||
}) => {
|
||||
return request.get<ImFriendRequestRespVO[]>({ url: '/im/friend-request/pull', params })
|
||||
}
|
||||
|
||||
// 按 id 单查「我相关」的申请记录(带越权过滤;WebSocket 通知到达后用)
|
||||
export const getMyFriendRequest = (id: number) => {
|
||||
return request.get<ImFriendRequestRespVO | null>({
|
||||
url: '/im/friend-request/get',
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,140 @@
|
|||
import request from '@/config/axios'
|
||||
import type { ImGroupMessageRespVO } from '@/api/im/message/group'
|
||||
|
||||
// 群 Response VO
|
||||
export interface ImGroupRespVO {
|
||||
id: number // 编号
|
||||
name: string // 群名称
|
||||
ownerUserId: number // 群主用户编号
|
||||
avatar?: string // 群头像
|
||||
notice?: string // 群公告
|
||||
banned?: boolean // 是否封禁
|
||||
mutedAll?: boolean // 是否全群禁言
|
||||
joinApproval?: boolean // 进群是否需群主 / 管理员审批
|
||||
bannedTime?: string // 封禁时间
|
||||
status: number // 群状态(0=正常,1=已解散)
|
||||
dissolvedTime?: string // 解散时间
|
||||
createTime?: string // 创建时间
|
||||
pinnedMessages?: ImGroupMessageRespVO[] // 群置顶消息列表(后端关联回填,仅当登录用户是群成员时非空)
|
||||
joinStatus?: number // 当前登录用户在该群的成员状态(参见 CommonStatusEnum:0 在群 / 1 已退群);历史退群群仍返回,供展示离线消息的群名 / 头像
|
||||
groupRemark?: string // 当前登录用户对该群的备注
|
||||
silent?: boolean // 当前登录用户是否免打扰
|
||||
}
|
||||
|
||||
// 群消息置顶 / 取消置顶 Request VO
|
||||
export interface ImGroupMessagePinReqVO {
|
||||
id: number // 群编号
|
||||
messageId: number // 消息编号
|
||||
}
|
||||
|
||||
// 群创建 Request VO
|
||||
export interface ImGroupCreateReqVO {
|
||||
name: string // 群名称
|
||||
memberUserIds?: number[] // 初始成员用户编号列表(建群同时邀请的好友,不含创建者自己)
|
||||
joinApproval?: boolean // 进群是否需审批;不传默认 false 自由进群
|
||||
}
|
||||
|
||||
// 群更新 Request VO
|
||||
export interface ImGroupUpdateReqVO {
|
||||
id: number // 群编号
|
||||
name?: string // 群名称
|
||||
avatar?: string // 群头像
|
||||
notice?: string // 群公告
|
||||
joinApproval?: boolean // 进群是否需审批
|
||||
}
|
||||
|
||||
// 添加 / 撤销群管理员 Request VO
|
||||
export interface ImGroupAdminReqVO {
|
||||
id: number // 群编号
|
||||
userIds: number[] // 目标用户编号列表
|
||||
}
|
||||
|
||||
// 群主转让 Request VO
|
||||
export interface ImGroupTransferOwnerReqVO {
|
||||
id: number // 群编号
|
||||
newOwnerUserId: number // 新群主用户编号
|
||||
}
|
||||
|
||||
// 全群禁言 / 取消 Request VO
|
||||
export interface ImGroupMuteAllReqVO {
|
||||
id: number // 群编号
|
||||
mutedAll: boolean // 是否全群禁言
|
||||
}
|
||||
|
||||
// 成员禁言 Request VO
|
||||
export interface ImGroupMuteMemberReqVO {
|
||||
id: number // 群编号
|
||||
userId: number // 被禁言的用户编号
|
||||
mutedSeconds: number // 禁言时长(秒),0 表示永久禁言
|
||||
}
|
||||
|
||||
// 取消成员禁言 Request VO
|
||||
export interface ImGroupCancelMuteMemberReqVO {
|
||||
id: number // 群编号
|
||||
userId: number // 被取消禁言的用户编号
|
||||
}
|
||||
|
||||
// 获得当前登录用户的群列表
|
||||
export const getMyGroupList = () => {
|
||||
return request.get<ImGroupRespVO[]>({ url: '/im/group/list' })
|
||||
}
|
||||
|
||||
// 获得群详情
|
||||
export const getGroup = (id: number | string) => {
|
||||
return request.get<ImGroupRespVO>({ url: '/im/group/get', params: { id } })
|
||||
}
|
||||
|
||||
// 创建群
|
||||
export const createGroup = (data: ImGroupCreateReqVO) => {
|
||||
return request.post<ImGroupRespVO>({ url: '/im/group/create', data })
|
||||
}
|
||||
|
||||
// 更新群
|
||||
export const updateGroup = (data: ImGroupUpdateReqVO) => {
|
||||
return request.put<ImGroupRespVO>({ url: '/im/group/update', data })
|
||||
}
|
||||
|
||||
// 解散群
|
||||
export const dissolveGroup = (id: number | string) => {
|
||||
return request.delete<boolean>({ url: '/im/group/dissolve', params: { id } })
|
||||
}
|
||||
|
||||
// 添加群管理员(仅群主可调)
|
||||
export const addGroupAdmin = (data: ImGroupAdminReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group/add-admin', data })
|
||||
}
|
||||
|
||||
// 撤销群管理员(仅群主可调)
|
||||
export const removeGroupAdmin = (data: ImGroupAdminReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group/remove-admin', data })
|
||||
}
|
||||
|
||||
// 转让群主(仅老群主可调;旧群主转让后降为普通成员)
|
||||
export const transferGroupOwner = (data: ImGroupTransferOwnerReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group/transfer-owner', data })
|
||||
}
|
||||
|
||||
// 置顶群消息(仅群主 / 管理员可调)
|
||||
export const pinGroupMessage = (data: ImGroupMessagePinReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group/pin-message', data })
|
||||
}
|
||||
|
||||
// 取消置顶群消息(仅群主 / 管理员可调)
|
||||
export const unpinGroupMessage = (data: ImGroupMessagePinReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group/unpin-message', data })
|
||||
}
|
||||
|
||||
// 全群禁言 / 取消(仅群主 / 管理员可调)
|
||||
export const muteAll = (data: ImGroupMuteAllReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group/mute-all', data })
|
||||
}
|
||||
|
||||
// 禁言成员
|
||||
export const muteMember = (data: ImGroupMuteMemberReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group/mute-member', data })
|
||||
}
|
||||
|
||||
// 取消成员禁言
|
||||
export const cancelMuteMember = (data: ImGroupCancelMuteMemberReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group/cancel-mute-member', data })
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 群成员 Response VO
|
||||
export interface ImGroupMemberRespVO {
|
||||
id: number // 编号
|
||||
groupId: number // 群编号
|
||||
userId: number // 用户编号
|
||||
displayUserName?: string // 组内显示名(群主设置的备注)
|
||||
groupRemark?: string // 群备注(当前用户对群的备注)
|
||||
silent?: boolean // 是否免打扰
|
||||
status?: number // 成员状态(0=在群,1=退群)
|
||||
role?: number // 成员角色,参见 ImGroupMemberRole 枚举
|
||||
joinTime?: string // 入群时间
|
||||
quitTime?: string // 退群时间
|
||||
muteEndTime?: string // 禁言到期时间
|
||||
createTime?: string // 创建时间
|
||||
// 聚合字段(自 AdminUser)
|
||||
nickname?: string // 用户昵称
|
||||
avatar?: string // 用户头像
|
||||
}
|
||||
|
||||
// 群成员邀请 Request VO
|
||||
export interface ImGroupMemberInviteReqVO {
|
||||
groupId: number // 群编号
|
||||
memberUserIds: number[] // 被邀请的用户编号列表
|
||||
}
|
||||
|
||||
// 群成员移除 Request VO
|
||||
export interface ImGroupMemberRemoveReqVO {
|
||||
groupId: number // 群编号
|
||||
memberUserIds: number[] // 被移除的用户编号列表
|
||||
}
|
||||
|
||||
// 群成员更新 Request VO
|
||||
export interface ImGroupMemberUpdateReqVO {
|
||||
groupId: number // 群编号
|
||||
displayUserName?: string // 群内昵称
|
||||
groupRemark?: string // 群备注
|
||||
silent?: boolean // 是否免打扰
|
||||
}
|
||||
|
||||
// 邀请用户加入群
|
||||
export const inviteGroupMember = (data: ImGroupMemberInviteReqVO) => {
|
||||
return request.post<boolean>({ url: '/im/group/invite', data })
|
||||
}
|
||||
|
||||
// 退出群
|
||||
export const quitGroup = (groupId: number | string) => {
|
||||
return request.delete<boolean>({ url: '/im/group/quit', params: { groupId } })
|
||||
}
|
||||
|
||||
// 移除群成员
|
||||
export const removeGroupMember = (data: ImGroupMemberRemoveReqVO) => {
|
||||
return request.delete<boolean>({ url: '/im/group/kicking', data })
|
||||
}
|
||||
|
||||
// 获得群成员详情
|
||||
export const getGroupMember = (groupId: number, userId: number) => {
|
||||
return request.get<ImGroupMemberRespVO>({
|
||||
url: '/im/group-member/get',
|
||||
params: { groupId, userId }
|
||||
})
|
||||
}
|
||||
|
||||
// 获得指定群的成员列表(聚合 AdminUser 昵称 / 头像)
|
||||
export const getGroupMemberList = (groupId: number | string) => {
|
||||
return request.get<ImGroupMemberRespVO[]>({
|
||||
url: '/im/group-member/list',
|
||||
params: { groupId }
|
||||
})
|
||||
}
|
||||
|
||||
// 更新群成员
|
||||
export const updateGroupMember = (data: ImGroupMemberUpdateReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group-member/update', data })
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// IM 加群申请 Response VO
|
||||
export interface ImGroupRequestRespVO {
|
||||
id: number // 申请编号
|
||||
groupId: number // 群编号
|
||||
userId: number // 申请人 / 被邀请人用户编号
|
||||
inviterUserId?: number // 邀请人;NULL 表示用户主动申请
|
||||
handleResult: number // 处理结果;0=未处理;1=同意;2=拒绝
|
||||
applyContent?: string // 申请理由
|
||||
handleContent?: string // 处理理由(拒绝时可选填)
|
||||
handleUserId?: number // 处理人用户编号
|
||||
addSource?: number // 加入来源;参见 ImGroupAddSourceEnum
|
||||
handleTime?: string // 处理时间
|
||||
createTime: string // 申请创建时间
|
||||
updateTime?: number // 最近更新时间(毫秒时间戳,增量拉取游标用)
|
||||
// 聚合字段
|
||||
userNickname?: string // 申请人 / 被邀请人昵称
|
||||
userAvatar?: string // 申请人 / 被邀请人头像
|
||||
inviterNickname?: string // 邀请人昵称
|
||||
inviterAvatar?: string // 邀请人头像
|
||||
groupName?: string // 群名称
|
||||
groupAvatar?: string // 群头像
|
||||
}
|
||||
|
||||
// IM 加群申请发起 Request VO
|
||||
export interface ImGroupRequestApplyReqVO {
|
||||
groupId: number // 群编号
|
||||
applyContent?: string // 申请理由
|
||||
addSource?: number // 加入来源
|
||||
}
|
||||
|
||||
// 申请加群
|
||||
export const applyJoinGroup = (data: ImGroupRequestApplyReqVO) => {
|
||||
return request.post<number | null>({ url: '/im/group-request/apply', data })
|
||||
}
|
||||
|
||||
// 同意加群申请(群主或管理员)
|
||||
export const agreeGroupRequest = (id: number | string) => {
|
||||
return request.put<boolean>({ url: '/im/group-request/agree', params: { id } })
|
||||
}
|
||||
|
||||
// 拒绝加群申请(群主或管理员)
|
||||
export const refuseGroupRequest = (id: number | string, handleContent?: string) => {
|
||||
return request.put<boolean>({
|
||||
url: '/im/group-request/refuse',
|
||||
params: { id, handleContent }
|
||||
})
|
||||
}
|
||||
|
||||
// 查询「我管理的所有群」下的未处理加群申请列表(不分页);前端 store 据此派生横幅红点 + Drawer 列表
|
||||
export const getUnhandledRequestList = () => {
|
||||
return request.get<ImGroupRequestRespVO[]>({
|
||||
url: '/im/group-request/unhandled-list'
|
||||
})
|
||||
}
|
||||
|
||||
// 查询指定群下的全部加群申请(含已处理);仅群主 / 管理员可查
|
||||
export const getGroupRequestListByGroupId = (groupId: number) => {
|
||||
return request.get<ImGroupRequestRespVO[]>({
|
||||
url: '/im/group-request/list-by-group',
|
||||
params: { groupId }
|
||||
})
|
||||
}
|
||||
|
||||
// 按 id 单查申请记录(带越权过滤;WebSocket 通知到达后用)
|
||||
export const getMyGroupRequest = (id: number) => {
|
||||
return request.get<ImGroupRequestRespVO | null>({
|
||||
url: '/im/group-request/get',
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
|
||||
// 增量拉取我管理的所有群下加群申请变更(重连 / 离线补偿)
|
||||
export const pullMyGroupRequestList = (params: {
|
||||
lastUpdateTime?: number
|
||||
lastId?: number
|
||||
limit: number
|
||||
}) => {
|
||||
return request.get<ImGroupRequestRespVO[]>({ url: '/im/group-request/pull', params })
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerChannelVO {
|
||||
id: number
|
||||
code: string
|
||||
name: string
|
||||
avatar?: string
|
||||
sort: number
|
||||
status: number
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 获得频道分页
|
||||
export const getManagerChannelPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/channel/page', params })
|
||||
}
|
||||
|
||||
// 获得频道详情
|
||||
export const getManagerChannel = (id: number) => {
|
||||
return request.get({ url: '/im/manager/channel/get', params: { id } })
|
||||
}
|
||||
|
||||
// 新增频道
|
||||
export const createManagerChannel = (data: ImManagerChannelVO) => {
|
||||
return request.post({ url: '/im/manager/channel/create', data })
|
||||
}
|
||||
|
||||
// 修改频道
|
||||
export const updateManagerChannel = (data: ImManagerChannelVO) => {
|
||||
return request.put({ url: '/im/manager/channel/update', data })
|
||||
}
|
||||
|
||||
// 删除频道
|
||||
export const deleteManagerChannel = (id: number) => {
|
||||
return request.delete({ url: '/im/manager/channel/delete', params: { id } })
|
||||
}
|
||||
|
||||
// 获得启用的频道精简列表(表单选择用)
|
||||
export const getSimpleChannelList = () => {
|
||||
return request.get<ImManagerChannelVO[]>({ url: '/im/manager/channel/simple-list' })
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerChannelMaterialVO {
|
||||
id: number
|
||||
channelId: number
|
||||
channelName?: string
|
||||
type: number
|
||||
title: string
|
||||
coverUrl?: string
|
||||
summary?: string
|
||||
content?: string
|
||||
url?: string
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 获得素材分页
|
||||
export const getManagerChannelMaterialPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/channel-material/page', params })
|
||||
}
|
||||
|
||||
// 获得指定频道下的素材精简列表
|
||||
export const getSimpleManagerChannelMaterialList = (channelId: number) => {
|
||||
return request.get({
|
||||
url: '/im/manager/channel-material/simple-list',
|
||||
params: { channelId }
|
||||
})
|
||||
}
|
||||
|
||||
// 获得素材详情
|
||||
export const getManagerChannelMaterial = (id: number) => {
|
||||
return request.get({ url: '/im/manager/channel-material/get', params: { id } })
|
||||
}
|
||||
|
||||
// 新增素材
|
||||
export const createManagerChannelMaterial = (data: ImManagerChannelMaterialVO) => {
|
||||
return request.post({ url: '/im/manager/channel-material/create', data })
|
||||
}
|
||||
|
||||
// 修改素材
|
||||
export const updateManagerChannelMaterial = (data: ImManagerChannelMaterialVO) => {
|
||||
return request.put({ url: '/im/manager/channel-material/update', data })
|
||||
}
|
||||
|
||||
// 删除素材
|
||||
export const deleteManagerChannelMaterial = (id: number) => {
|
||||
return request.delete({ url: '/im/manager/channel-material/delete', params: { id } })
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerChannelMessageVO {
|
||||
id: number
|
||||
channelId: number
|
||||
channelName?: string
|
||||
materialId: number
|
||||
materialTitle?: string
|
||||
materialCoverUrl?: string
|
||||
type: number
|
||||
content?: string
|
||||
receiverUserIds?: number[]
|
||||
sendTime?: Date
|
||||
}
|
||||
|
||||
export interface ImManagerChannelMessageSendReqVO {
|
||||
materialId: number
|
||||
receiverUserIds?: number[]
|
||||
}
|
||||
|
||||
// 立即推送频道消息
|
||||
export const sendManagerChannelMessage = (data: ImManagerChannelMessageSendReqVO) => {
|
||||
return request.post({ url: '/im/manager/channel-message/send', data })
|
||||
}
|
||||
|
||||
// 删除频道消息
|
||||
export const deleteManagerChannelMessage = (id: number) => {
|
||||
return request.delete({ url: '/im/manager/channel-message/delete', params: { id } })
|
||||
}
|
||||
|
||||
// 获得频道消息分页
|
||||
export const getManagerChannelMessagePage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/channel-message/page', params })
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerFacePackItemVO {
|
||||
id: number
|
||||
packId: number
|
||||
url: string
|
||||
name?: string
|
||||
width: number
|
||||
height: number
|
||||
sort: number
|
||||
status: number
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 获得表情分页
|
||||
export const getManagerFacePackItemPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/face-pack-item/page', params })
|
||||
}
|
||||
|
||||
// 获得表情详情
|
||||
export const getManagerFacePackItem = (id: number) => {
|
||||
return request.get({ url: '/im/manager/face-pack-item/get', params: { id } })
|
||||
}
|
||||
|
||||
// 新增表情
|
||||
export const createManagerFacePackItem = (data: ImManagerFacePackItemVO) => {
|
||||
return request.post({ url: '/im/manager/face-pack-item/create', data })
|
||||
}
|
||||
|
||||
// 修改表情
|
||||
export const updateManagerFacePackItem = (data: ImManagerFacePackItemVO) => {
|
||||
return request.put({ url: '/im/manager/face-pack-item/update', data })
|
||||
}
|
||||
|
||||
// 删除表情
|
||||
export const deleteManagerFacePackItem = (id: number) => {
|
||||
return request.delete({ url: '/im/manager/face-pack-item/delete', params: { id } })
|
||||
}
|
||||
|
||||
// 批量删除表情
|
||||
export const deleteManagerFacePackItemList = (ids: number[]) => {
|
||||
return request.delete({
|
||||
url: '/im/manager/face-pack-item/delete-list',
|
||||
params: { ids: ids.join(',') }
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerFacePackVO {
|
||||
id: number
|
||||
name: string
|
||||
icon?: string
|
||||
sort: number
|
||||
status: number
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 获得表情包分页
|
||||
export const getManagerFacePackPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/face-pack/page', params })
|
||||
}
|
||||
|
||||
// 获得表情包详情
|
||||
export const getManagerFacePack = (id: number) => {
|
||||
return request.get({ url: '/im/manager/face-pack/get', params: { id } })
|
||||
}
|
||||
|
||||
// 新增表情包
|
||||
export const createManagerFacePack = (data: ImManagerFacePackVO) => {
|
||||
return request.post({ url: '/im/manager/face-pack/create', data })
|
||||
}
|
||||
|
||||
// 修改表情包
|
||||
export const updateManagerFacePack = (data: ImManagerFacePackVO) => {
|
||||
return request.put({ url: '/im/manager/face-pack/update', data })
|
||||
}
|
||||
|
||||
// 删除表情包
|
||||
export const deleteManagerFacePack = (id: number) => {
|
||||
return request.delete({ url: '/im/manager/face-pack/delete', params: { id } })
|
||||
}
|
||||
|
||||
// 批量删除表情包
|
||||
export const deleteManagerFacePackList = (ids: number[]) => {
|
||||
return request.delete({
|
||||
url: '/im/manager/face-pack/delete-list',
|
||||
params: { ids: ids.join(',') }
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerFaceUserItemVO {
|
||||
id: number
|
||||
userId: number
|
||||
userNickname?: string
|
||||
url: string
|
||||
name?: string
|
||||
width?: number
|
||||
height?: number
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 获得用户表情分页
|
||||
export const getManagerFaceUserItemPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/face-user-item/page', params })
|
||||
}
|
||||
|
||||
// 删除用户表情
|
||||
export const deleteManagerFaceUserItem = (id: number) => {
|
||||
return request.delete({ url: '/im/manager/face-user-item/delete', params: { id } })
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerFriendVO {
|
||||
id: number
|
||||
userId: number
|
||||
userNickname?: string
|
||||
friendUserId: number
|
||||
friendNickname?: string
|
||||
displayName?: string
|
||||
addSource?: number
|
||||
silent: boolean
|
||||
pinned: boolean
|
||||
blocked: boolean
|
||||
status: number
|
||||
addTime?: Date
|
||||
deleteTime?: Date
|
||||
createTime: Date
|
||||
}
|
||||
|
||||
// 获得好友关系分页
|
||||
export const getManagerFriendPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/friend/page', params })
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerFriendRequestVO {
|
||||
id: number
|
||||
fromUserId: number
|
||||
fromNickname?: string
|
||||
toUserId: number
|
||||
toNickname?: string
|
||||
applyContent?: string
|
||||
displayName?: string
|
||||
addSource?: number
|
||||
handleResult: number
|
||||
handleContent?: string
|
||||
handleTime?: Date
|
||||
createTime: Date
|
||||
}
|
||||
|
||||
// 获得好友申请分页
|
||||
export const getManagerFriendRequestPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/friend-request/page', params })
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerGroupVO {
|
||||
id: number
|
||||
name: string
|
||||
avatar?: string
|
||||
notice?: string
|
||||
ownerUserId: number
|
||||
ownerNickname?: string
|
||||
memberCount?: number
|
||||
status: number
|
||||
banned: boolean
|
||||
mutedAll?: boolean // 是否全群禁言
|
||||
bannedReason?: string
|
||||
bannedTime?: Date
|
||||
dissolvedTime?: Date
|
||||
createTime: Date
|
||||
}
|
||||
|
||||
export interface ImManagerGroupMemberVO {
|
||||
userId: number
|
||||
nickname?: string
|
||||
avatar?: string
|
||||
displayUserName?: string
|
||||
groupRemark?: string
|
||||
silent?: boolean
|
||||
status: number
|
||||
role?: number // 成员角色,参见 ImGroupMemberRole 枚举
|
||||
joinTime?: Date
|
||||
quitTime?: Date
|
||||
muteEndTime?: Date // 禁言到期时间
|
||||
}
|
||||
|
||||
// 获得群分页
|
||||
export const getManagerGroupPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/group/page', params })
|
||||
}
|
||||
|
||||
// 获得群详情
|
||||
export const getManagerGroup = (id: number) => {
|
||||
return request.get({ url: '/im/manager/group/get', params: { id } })
|
||||
}
|
||||
|
||||
// 封禁群
|
||||
export const banManagerGroup = (data: { id: number; reason: string }) => {
|
||||
return request.put({ url: '/im/manager/group/ban', data })
|
||||
}
|
||||
|
||||
// 解封群
|
||||
export const unbanManagerGroup = (id: number) => {
|
||||
return request.put({ url: '/im/manager/group/unban', params: { id } })
|
||||
}
|
||||
|
||||
// 解散群
|
||||
export const dissolveManagerGroup = (id: number) => {
|
||||
return request.delete({ url: '/im/manager/group/dissolve', params: { id } })
|
||||
}
|
||||
|
||||
// 获得群成员列表(含已退群成员,由前端按需过滤)
|
||||
export const getManagerGroupMemberList = (groupId: number) => {
|
||||
return request.get({ url: '/im/manager/group/member/list', params: { groupId } })
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerGroupRequestVO {
|
||||
id: number
|
||||
groupId: number
|
||||
groupName?: string
|
||||
userId: number
|
||||
userNickname?: string
|
||||
inviterUserId?: number
|
||||
inviterNickname?: string
|
||||
applyContent?: string
|
||||
addSource?: number
|
||||
handleResult: number
|
||||
handleUserId?: number
|
||||
handleNickname?: string
|
||||
handleContent?: string
|
||||
handleTime?: Date
|
||||
createTime: Date
|
||||
}
|
||||
|
||||
// 获得加群申请分页
|
||||
export const getManagerGroupRequestPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/group-request/page', params })
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerGroupMessageVO {
|
||||
id: number
|
||||
clientMessageId?: string
|
||||
groupId: number
|
||||
groupName?: string
|
||||
senderId: number
|
||||
senderNickname?: string
|
||||
type: number
|
||||
content: string
|
||||
status: number
|
||||
atUserIds?: number[]
|
||||
// 与 atUserIds 同长度;后端对找不到 / 已删除的成员返回 null,UI 用 `?.[idx] || userId` 回退到 userId 渲染
|
||||
atUserNicknames?: (string | null)[]
|
||||
receiptStatus: number
|
||||
sendTime: Date
|
||||
createTime: Date
|
||||
}
|
||||
|
||||
// 获得群聊消息分页
|
||||
export const getManagerGroupMessagePage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/message/group/page', params })
|
||||
}
|
||||
|
||||
// 获得群聊消息详情
|
||||
export const getManagerGroupMessage = (id: number) => {
|
||||
return request.get({ url: '/im/manager/message/group/get', params: { id } })
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerPrivateMessageVO {
|
||||
id: number
|
||||
clientMessageId?: string
|
||||
senderId: number
|
||||
senderNickname?: string
|
||||
receiverId: number
|
||||
receiverNickname?: string
|
||||
type: number
|
||||
content: string
|
||||
status: number
|
||||
receiptStatus: number
|
||||
sendTime: Date
|
||||
createTime: Date
|
||||
}
|
||||
|
||||
// 获得私聊消息分页
|
||||
export const getManagerPrivateMessagePage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/message/private/page', params })
|
||||
}
|
||||
|
||||
// 获得私聊消息详情
|
||||
export const getManagerPrivateMessage = (id: number) => {
|
||||
return request.get({ url: '/im/manager/message/private/get', params: { id } })
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerRtcCallVO {
|
||||
id: number
|
||||
room: string
|
||||
conversationType: number
|
||||
mediaType: number
|
||||
inviterUserId: number
|
||||
inviterNickname?: string
|
||||
groupId?: number
|
||||
groupName?: string
|
||||
status: number
|
||||
endReason?: number
|
||||
startTime: Date
|
||||
acceptTime?: Date
|
||||
endTime?: Date
|
||||
createTime: Date
|
||||
}
|
||||
|
||||
export interface ImManagerRtcParticipantVO {
|
||||
id: number
|
||||
callId: number
|
||||
userId: number
|
||||
userNickname?: string
|
||||
role: number
|
||||
status: number
|
||||
inviteTime: Date
|
||||
acceptTime?: Date
|
||||
leaveTime?: Date
|
||||
}
|
||||
|
||||
// 获得通话记录分页
|
||||
export const getManagerRtcCallPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/rtc/page', params })
|
||||
}
|
||||
|
||||
// 获得通话参与者列表
|
||||
export const getManagerRtcCallParticipantList = (id: number) => {
|
||||
return request.get({ url: '/im/manager/rtc/participant-list', params: { id } })
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImManagerSensitiveWordVO {
|
||||
id: number
|
||||
word: string
|
||||
status: number
|
||||
creator?: string
|
||||
creatorName?: string
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 获得敏感词分页
|
||||
export const getManagerSensitiveWordPage = (params: PageParam) => {
|
||||
return request.get({ url: '/im/manager/sensitive-word/page', params })
|
||||
}
|
||||
|
||||
// 获得敏感词详情
|
||||
export const getManagerSensitiveWord = (id: number) => {
|
||||
return request.get({ url: '/im/manager/sensitive-word/get', params: { id } })
|
||||
}
|
||||
|
||||
// 新增敏感词
|
||||
export const createManagerSensitiveWord = (data: ImManagerSensitiveWordVO) => {
|
||||
return request.post({ url: '/im/manager/sensitive-word/create', data })
|
||||
}
|
||||
|
||||
// 修改敏感词
|
||||
export const updateManagerSensitiveWord = (data: ImManagerSensitiveWordVO) => {
|
||||
return request.put({ url: '/im/manager/sensitive-word/update', data })
|
||||
}
|
||||
|
||||
// 删除敏感词
|
||||
export const deleteManagerSensitiveWord = (id: number) => {
|
||||
return request.delete({ url: '/im/manager/sensitive-word/delete', params: { id } })
|
||||
}
|
||||
|
||||
// 批量删除敏感词
|
||||
export const deleteManagerSensitiveWordList = (ids: number[]) => {
|
||||
return request.delete({
|
||||
url: '/im/manager/sensitive-word/delete-list',
|
||||
params: { ids: ids.join(',') }
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImStatisticsOverviewVO {
|
||||
totalUser: number
|
||||
newUserToday: number
|
||||
totalGroup: number
|
||||
newGroupToday: number
|
||||
activeUserDaily: number
|
||||
activeUserWeekly: number
|
||||
activeUserMonthly: number
|
||||
privateMessageToday: number
|
||||
groupMessageToday: number
|
||||
privateMessageYesterday: number
|
||||
groupMessageYesterday: number
|
||||
}
|
||||
|
||||
export interface ImStatisticsTrendVO {
|
||||
dates: string[]
|
||||
series: Record<string, number[]>
|
||||
}
|
||||
|
||||
export interface ImStatisticsMessageTypeVO {
|
||||
type: number // 参见 ImContentTypeEnum 枚举类,由前端按 DICT_TYPE.IM_CONTENT_TYPE 翻译
|
||||
value: number
|
||||
}
|
||||
|
||||
export interface ImStatisticsGroupSizeVO {
|
||||
range: string
|
||||
count: number
|
||||
}
|
||||
|
||||
export interface ImStatisticsTopSenderVO {
|
||||
userId: number
|
||||
nickname: string
|
||||
messageCount: number
|
||||
}
|
||||
|
||||
// 获得 KPI 概览
|
||||
export const getStatisticsOverview = (): Promise<ImStatisticsOverviewVO> => {
|
||||
return request.get<ImStatisticsOverviewVO>({ url: '/im/manager/statistics/overview' })
|
||||
}
|
||||
|
||||
// 获得消息趋势(私聊 + 群聊双线)
|
||||
export const getMessageTrend = (days: number): Promise<ImStatisticsTrendVO> => {
|
||||
return request.get<ImStatisticsTrendVO>({
|
||||
url: '/im/manager/statistics/message-trend',
|
||||
params: { days }
|
||||
})
|
||||
}
|
||||
|
||||
// 获得用户趋势(新增注册 + 日活双线)
|
||||
export const getUserTrend = (days: number): Promise<ImStatisticsTrendVO> => {
|
||||
return request.get<ImStatisticsTrendVO>({
|
||||
url: '/im/manager/statistics/user-trend',
|
||||
params: { days }
|
||||
})
|
||||
}
|
||||
|
||||
// 获得内容类型分布(最近 30 天)
|
||||
export const getMessageTypeDistribution = (): Promise<ImStatisticsMessageTypeVO[]> => {
|
||||
return request.get<ImStatisticsMessageTypeVO[]>({
|
||||
url: '/im/manager/statistics/message-type-distribution'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得群规模分布
|
||||
export const getGroupSizeDistribution = (): Promise<ImStatisticsGroupSizeVO[]> => {
|
||||
return request.get<ImStatisticsGroupSizeVO[]>({
|
||||
url: '/im/manager/statistics/group-size-distribution'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得消息 TOP 发送者(最近 30 天)
|
||||
export const getTopSenders = (): Promise<ImStatisticsTopSenderVO[]> => {
|
||||
return request.get<ImStatisticsTopSenderVO[]>({ url: '/im/manager/statistics/top-senders' })
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ImChannelMessageRespVO {
|
||||
id: number
|
||||
clientMessageId?: string
|
||||
channelId: number
|
||||
materialId: number
|
||||
type: number
|
||||
content: string
|
||||
receiptStatus?: number
|
||||
sendTime: string
|
||||
}
|
||||
|
||||
// 拉取当前用户应收的频道消息(离线增量);按 minId 游标分页
|
||||
export const pullChannelMessageList = (
|
||||
params: { minId: number; size?: number },
|
||||
signal?: AbortSignal
|
||||
) => {
|
||||
return request.get<ImChannelMessageRespVO[]>({
|
||||
url: '/im/channel/message/pull',
|
||||
params,
|
||||
signal
|
||||
})
|
||||
}
|
||||
|
||||
// 上报频道消息已读位置;切到频道会话或拉到新消息后调
|
||||
export const readChannelMessages = (channelId: number, messageId: number) => {
|
||||
return request.put({
|
||||
url: '/im/channel/message/read',
|
||||
params: { channelId, messageId }
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 群聊消息 Response VO
|
||||
export interface ImGroupMessageRespVO {
|
||||
id: number // 消息编号
|
||||
clientMessageId: string // 客户端消息编号
|
||||
senderId: number // 发送人编号
|
||||
groupId: number // 群编号
|
||||
type: number // 内容类型
|
||||
content: string // 消息内容(JSON 格式)
|
||||
status: number // 消息状态
|
||||
sendTime: string // 发送时间
|
||||
atUserIds?: number[] // @ 目标用户编号列表
|
||||
receiverUserIds?: number[] // 定向接收用户编号列表
|
||||
receiptStatus?: number // 回执状态
|
||||
readCount?: number // 已读人数(回执消息、且发送人为当前用户时有值)
|
||||
}
|
||||
|
||||
// 群聊消息发送 Request VO
|
||||
export interface ImGroupMessageSendReqVO {
|
||||
clientMessageId: string // 客户端消息编号
|
||||
groupId: number // 群编号
|
||||
type: number // 内容类型
|
||||
content: string // 消息内容(JSON 格式)
|
||||
atUserIds?: number[] // @ 目标用户编号列表
|
||||
receipt?: boolean // 是否需要回执
|
||||
}
|
||||
|
||||
// 群聊历史消息列表 Request VO
|
||||
export interface ImGroupMessageListReqVO {
|
||||
groupId: number | string // 群编号
|
||||
maxId?: number | string // 起始消息编号(不含),为空则从最新消息开始
|
||||
limit: number // 拉取数量(1 ~ 200)
|
||||
}
|
||||
|
||||
// 发送群聊消息
|
||||
export const sendGroupMessage = (data: ImGroupMessageSendReqVO) => {
|
||||
return request.post<ImGroupMessageRespVO>({ url: '/im/message/group/send', data })
|
||||
}
|
||||
|
||||
// 拉取群聊消息(增量)
|
||||
export const pullGroupMessageList = (
|
||||
params: { minId: number | string; size: number },
|
||||
signal?: AbortSignal
|
||||
) => {
|
||||
return request.get<ImGroupMessageRespVO[]>({ url: '/im/message/group/pull', params, signal })
|
||||
}
|
||||
|
||||
// 查询群聊历史消息
|
||||
export const getGroupMessageList = (params: ImGroupMessageListReqVO) => {
|
||||
return request.get<ImGroupMessageRespVO[]>({ url: '/im/message/group/list', params })
|
||||
}
|
||||
|
||||
// 标记群聊消息已读
|
||||
export const readGroupMessages = (groupId: number | string, messageId: number | string) => {
|
||||
return request.put<boolean>({
|
||||
url: '/im/message/group/read',
|
||||
params: { groupId, messageId }
|
||||
})
|
||||
}
|
||||
|
||||
// 撤回群聊消息
|
||||
export const recallGroupMessage = (id: number | string) => {
|
||||
return request.delete<ImGroupMessageRespVO>({
|
||||
url: '/im/message/group/recall',
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
|
||||
// 获取群消息已读用户列表
|
||||
export const getGroupReadUsers = (params: {
|
||||
groupId: number | string
|
||||
messageId: number | string
|
||||
}) => {
|
||||
return request.get<number[]>({ url: '/im/message/group/get-read-user-ids', params })
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 私聊消息 Response VO
|
||||
export interface ImPrivateMessageRespVO {
|
||||
id: number // 消息编号
|
||||
clientMessageId: string // 客户端消息编号
|
||||
senderId: number // 发送人编号
|
||||
receiverId: number // 接收人编号
|
||||
type: number // 内容类型
|
||||
content: string // 消息内容(JSON 格式)
|
||||
status: number // 消息状态(正常 / 已撤回)
|
||||
receiptStatus?: number // 回执状态(不需要 / 待完成 / 已完成),对齐 ImMessageReceiptStatus
|
||||
sendTime: string // 发送时间
|
||||
}
|
||||
|
||||
// 私聊消息发送 Request VO
|
||||
export interface ImPrivateMessageSendReqVO {
|
||||
clientMessageId: string // 客户端消息编号
|
||||
receiverId: number // 接收人编号
|
||||
type: number // 内容类型
|
||||
content: string // 消息内容(JSON 格式)
|
||||
receipt?: boolean // 是否需要回执;不传后端默认 true(普通私聊用户消息)
|
||||
}
|
||||
|
||||
// 私聊历史消息列表 Request VO
|
||||
export interface ImPrivateMessageListReqVO {
|
||||
receiverId: number | string // 接收人编号(对方)
|
||||
maxId?: number | string // 起始消息编号(不含),为空则从最新消息开始
|
||||
limit: number // 拉取数量(1 ~ 200)
|
||||
}
|
||||
|
||||
// 发送私聊消息
|
||||
export const sendPrivateMessage = (data: ImPrivateMessageSendReqVO) => {
|
||||
return request.post<ImPrivateMessageRespVO>({ url: '/im/message/private/send', data })
|
||||
}
|
||||
|
||||
// 拉取私聊消息(增量)
|
||||
export const pullPrivateMessageList = (
|
||||
params: { minId: number | string; size: number },
|
||||
signal?: AbortSignal
|
||||
) => {
|
||||
return request.get<ImPrivateMessageRespVO[]>({ url: '/im/message/private/pull', params, signal })
|
||||
}
|
||||
|
||||
// 查询私聊历史消息
|
||||
export const getPrivateMessageList = (params: ImPrivateMessageListReqVO) => {
|
||||
return request.get<ImPrivateMessageRespVO[]>({ url: '/im/message/private/list', params })
|
||||
}
|
||||
|
||||
// 标记私聊消息已读
|
||||
export const readPrivateMessages = (receiverId: number | string, messageId: number | string) => {
|
||||
return request.put<boolean>({
|
||||
url: '/im/message/private/read',
|
||||
params: { receiverId, messageId }
|
||||
})
|
||||
}
|
||||
|
||||
// 查询对方已读到我发的最大消息 id(多端 / 离线后用于补齐已读状态)
|
||||
export const getPrivateMaxReadMessageId = (peerId: number | string, signal?: AbortSignal) => {
|
||||
return request.get<number | null>({
|
||||
url: '/im/message/private/max-read-message-id',
|
||||
params: { peerId },
|
||||
signal
|
||||
})
|
||||
}
|
||||
|
||||
// 撤回私聊消息
|
||||
export const recallPrivateMessage = (id: number | string) => {
|
||||
return request.delete<ImPrivateMessageRespVO>({
|
||||
url: '/im/message/private/recall',
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 创建新通话请求 VO
|
||||
export interface ImRtcCallCreateReqVO {
|
||||
conversationType: number
|
||||
mediaType: number
|
||||
groupId?: number
|
||||
inviteeIds: number[] // 被邀请的用户编号集合;私聊必传 1 个对端,群聊必传至少 1 人
|
||||
}
|
||||
|
||||
// 通话中追加邀请请求 VO;仅群通话可用
|
||||
export interface ImRtcCallInviteReqVO {
|
||||
room: string
|
||||
inviteeIds: number[]
|
||||
}
|
||||
|
||||
// 通话会话 VO;create / join / accept / refreshToken 共用
|
||||
export interface ImRtcCallRespVO {
|
||||
room: string // 业务通话编号(同时作为 LiveKit 房间名)
|
||||
livekitUrl: string
|
||||
token?: string // ENDED 状态时为 null(无需 connect LiveKit)
|
||||
conversationType: number
|
||||
mediaType: number
|
||||
status: number
|
||||
endReason?: number // 结束原因;仅 status=ENDED 时有值
|
||||
inviterId: number
|
||||
groupId?: number
|
||||
inviteeIds?: number[]
|
||||
joinedUserIds?: number[]
|
||||
}
|
||||
|
||||
// 群活跃通话查询响应;不含 token
|
||||
export interface ImRtcGroupCallRespVO {
|
||||
room: string
|
||||
groupId: number
|
||||
mediaType: number
|
||||
inviterId: number
|
||||
joinedUserIds?: number[]
|
||||
inviteeIds?: number[]
|
||||
}
|
||||
|
||||
// 创建新通话;私聊或群聊根据 conversationType 区分
|
||||
export const createCall = (data: ImRtcCallCreateReqVO) => {
|
||||
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/create', data })
|
||||
}
|
||||
|
||||
// 通话中追加邀请;仅群通话可用
|
||||
export const inviteCall = (data: ImRtcCallInviteReqVO) => {
|
||||
return request.post<boolean>({ url: '/im/rtc/invite', data })
|
||||
}
|
||||
|
||||
// 加入已有群通话;用于胶囊条「加入」按钮
|
||||
export const joinCall = (room: string) => {
|
||||
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/join', params: { room } })
|
||||
}
|
||||
|
||||
// 接听通话
|
||||
export const acceptCall = (room: string) => {
|
||||
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/accept', params: { room } })
|
||||
}
|
||||
|
||||
// 拒绝通话
|
||||
export const rejectCall = (room: string) => {
|
||||
return request.post<boolean>({ url: '/im/rtc/reject', params: { room } })
|
||||
}
|
||||
|
||||
// 取消邀请;主叫接通前调用
|
||||
export const cancelCall = (room: string) => {
|
||||
return request.post<boolean>({ url: '/im/rtc/cancel', params: { room } })
|
||||
}
|
||||
|
||||
// 离开通话;接通后调用
|
||||
export const leaveCall = (room: string) => {
|
||||
return request.post<boolean>({ url: '/im/rtc/leave', params: { room } })
|
||||
}
|
||||
|
||||
// 振铃超时检查;RUNNING 端 timer 兜底,触发后端立即扫描该 room 的超时 INVITING(接口静默)
|
||||
export const noAnswerCallCheck = (room: string) => {
|
||||
return request.post<boolean>({ url: '/im/rtc/no-answer-call-check', params: { room } })
|
||||
}
|
||||
|
||||
// 查询当前进行中的通话;目前仅群聊场景(胶囊条),返回 null 表示无活跃通话
|
||||
export const getActiveCall = (groupId: number) => {
|
||||
return request.get<ImRtcGroupCallRespVO | null>({
|
||||
url: '/im/rtc/get-active-call',
|
||||
params: { groupId }
|
||||
})
|
||||
}
|
||||
|
|
@ -20,6 +20,45 @@ export type CodegenTableVO = {
|
|||
parentMenuId: number
|
||||
}
|
||||
|
||||
export type CodegenTableSaveReqVO = CodegenTableVO & {
|
||||
frontType?: number | null
|
||||
genPath?: string
|
||||
genType?: string
|
||||
masterTableId?: number
|
||||
subJoinColumnId?: number
|
||||
subJoinMany?: boolean
|
||||
treeParentColumnId?: number
|
||||
treeNameColumnId?: number
|
||||
}
|
||||
|
||||
export const createEmptyCodegenTableSaveReqVO = (): CodegenTableSaveReqVO => ({
|
||||
id: 0,
|
||||
tableId: 0,
|
||||
isParentMenuIdValid: false,
|
||||
dataSourceConfigId: 0,
|
||||
scene: 0,
|
||||
tableName: '',
|
||||
tableComment: '',
|
||||
remark: '',
|
||||
moduleName: '',
|
||||
businessName: '',
|
||||
className: '',
|
||||
classComment: '',
|
||||
author: '',
|
||||
createTime: new Date(),
|
||||
updateTime: new Date(),
|
||||
templateType: 0,
|
||||
parentMenuId: 0,
|
||||
frontType: null,
|
||||
genPath: '',
|
||||
genType: '',
|
||||
masterTableId: undefined,
|
||||
subJoinColumnId: undefined,
|
||||
subJoinMany: undefined,
|
||||
treeParentColumnId: undefined,
|
||||
treeNameColumnId: undefined
|
||||
})
|
||||
|
||||
export type CodegenColumnVO = {
|
||||
id: number
|
||||
tableId: number
|
||||
|
|
@ -52,7 +91,7 @@ export type CodegenPreviewVO = {
|
|||
}
|
||||
|
||||
export type CodegenUpdateReqVO = {
|
||||
table: CodegenTableVO | any
|
||||
table: CodegenTableSaveReqVO
|
||||
columns: CodegenColumnVO[]
|
||||
}
|
||||
|
||||
|
|
@ -68,7 +107,7 @@ export const getCodegenTablePage = (params: PageParam) => {
|
|||
|
||||
// 查询详情代码生成表定义
|
||||
export const getCodegenTable = (id: number) => {
|
||||
return request.get({ url: '/infra/codegen/detail?tableId=' + id })
|
||||
return request.get<CodegenUpdateReqVO>({ url: '/infra/codegen/detail?tableId=' + id })
|
||||
}
|
||||
|
||||
// 修改代码生成表定义
|
||||
|
|
|
|||
|
|
@ -26,7 +26,10 @@ export const deleteDataSourceConfig = (id: number) => {
|
|||
|
||||
// 批量删除数据源配置
|
||||
export const deleteDataSourceConfigList = (ids: number[]) => {
|
||||
return request.delete({ url: '/infra/data-source-config/delete-list', params: { ids: ids.join(',') } })
|
||||
return request.delete({
|
||||
url: '/infra/data-source-config/delete-list',
|
||||
params: { ids: ids.join(',') }
|
||||
})
|
||||
}
|
||||
|
||||
// 查询数据源配置详情
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ export interface Demo02CategoryVO {
|
|||
}
|
||||
|
||||
// 查询示例分类列表
|
||||
export const getDemo02CategoryList = async () => {
|
||||
return await request.get({ url: `/infra/demo02-category/list` })
|
||||
export const getDemo02CategoryList = async (params?: any) => {
|
||||
return await request.get({ url: `/infra/demo02-category/list`, params })
|
||||
}
|
||||
|
||||
// 查询示例分类详情
|
||||
|
|
|
|||
|
|
@ -1,29 +1,28 @@
|
|||
import request from '@/config/axios'
|
||||
import type { Dayjs } from 'dayjs';
|
||||
|
||||
/** 学生课程信息 */
|
||||
export interface Demo03Course {
|
||||
id: number; // 编号
|
||||
studentId?: number; // 学生编号
|
||||
name?: string; // 名字
|
||||
score?: number; // 分数
|
||||
id?: number // 编号
|
||||
studentId?: number // 学生编号
|
||||
name?: string // 名字
|
||||
score?: number // 分数
|
||||
}
|
||||
|
||||
/** 学生班级信息 */
|
||||
export interface Demo03Grade {
|
||||
id: number; // 编号
|
||||
studentId?: number; // 学生编号
|
||||
name?: string; // 名字
|
||||
teacher?: string; // 班主任
|
||||
id?: number // 编号
|
||||
studentId?: number // 学生编号
|
||||
name?: string // 名字
|
||||
teacher?: string // 班主任
|
||||
}
|
||||
|
||||
/** 学生信息 */
|
||||
export interface Demo03Student {
|
||||
id: number; // 编号
|
||||
name?: string; // 名字
|
||||
sex?: number; // 性别
|
||||
birthday?: string | Dayjs; // 出生日期
|
||||
description?: string; // 简介
|
||||
id?: number // 编号
|
||||
name?: string // 名字
|
||||
sex?: number // 性别
|
||||
birthday?: string | number // 出生日期
|
||||
description?: string // 简介
|
||||
}
|
||||
|
||||
// 学生 API
|
||||
|
|
@ -55,7 +54,9 @@ export const Demo03StudentApi = {
|
|||
|
||||
/** 批量删除学生 */
|
||||
deleteDemo03StudentList: async (ids: number[]) => {
|
||||
return await request.delete({ url: `/infra/demo03-student-erp/delete-list?ids=${ids.join(',')}` })
|
||||
return await request.delete({
|
||||
url: `/infra/demo03-student-erp/delete-list?ids=${ids.join(',')}`
|
||||
})
|
||||
},
|
||||
|
||||
// 导出学生 Excel
|
||||
|
|
@ -63,7 +64,7 @@ export const Demo03StudentApi = {
|
|||
return await request.download({ url: `/infra/demo03-student-erp/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(学生课程) ====================
|
||||
// ==================== 子表(学生课程) ====================
|
||||
|
||||
// 获得学生课程分页
|
||||
getDemo03CoursePage: async (params) => {
|
||||
|
|
@ -86,7 +87,9 @@ export const Demo03StudentApi = {
|
|||
|
||||
/** 批量删除学生课程 */
|
||||
deleteDemo03CourseList: async (ids: number[]) => {
|
||||
return await request.delete({ url: `/infra/demo03-student-erp/demo03-course/delete-list?ids=${ids.join(',')}` })
|
||||
return await request.delete({
|
||||
url: `/infra/demo03-student-erp/demo03-course/delete-list?ids=${ids.join(',')}`
|
||||
})
|
||||
},
|
||||
|
||||
// 获得学生课程
|
||||
|
|
@ -94,7 +97,7 @@ export const Demo03StudentApi = {
|
|||
return await request.get({ url: `/infra/demo03-student-erp/demo03-course/get?id=` + id })
|
||||
},
|
||||
|
||||
// ==================== 子表(学生班级) ====================
|
||||
// ==================== 子表(学生班级) ====================
|
||||
|
||||
// 获得学生班级分页
|
||||
getDemo03GradePage: async (params) => {
|
||||
|
|
@ -117,11 +120,13 @@ export const Demo03StudentApi = {
|
|||
|
||||
/** 批量删除学生班级 */
|
||||
deleteDemo03GradeList: async (ids: number[]) => {
|
||||
return await request.delete({ url: `/infra/demo03-student-erp/demo03-grade/delete-list?ids=${ids.join(',')}` })
|
||||
return await request.delete({
|
||||
url: `/infra/demo03-student-erp/demo03-grade/delete-list?ids=${ids.join(',')}`
|
||||
})
|
||||
},
|
||||
|
||||
// 获得学生班级
|
||||
getDemo03Grade: async (id: number) => {
|
||||
return await request.get({ url: `/infra/demo03-student-erp/demo03-grade/get?id=` + id })
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,28 @@
|
|||
import request from '@/config/axios'
|
||||
import type { Dayjs } from 'dayjs';
|
||||
|
||||
/** 学生课程信息 */
|
||||
export interface Demo03Course {
|
||||
id: number; // 编号
|
||||
studentId?: number; // 学生编号
|
||||
name?: string; // 名字
|
||||
score?: number; // 分数
|
||||
id?: number // 编号
|
||||
studentId?: number // 学生编号
|
||||
name?: string // 名字
|
||||
score?: number // 分数
|
||||
}
|
||||
|
||||
/** 学生班级信息 */
|
||||
export interface Demo03Grade {
|
||||
id: number; // 编号
|
||||
studentId?: number; // 学生编号
|
||||
name?: string; // 名字
|
||||
teacher?: string; // 班主任
|
||||
id?: number // 编号
|
||||
studentId?: number // 学生编号
|
||||
name?: string // 名字
|
||||
teacher?: string // 班主任
|
||||
}
|
||||
|
||||
/** 学生信息 */
|
||||
export interface Demo03Student {
|
||||
id: number; // 编号
|
||||
name?: string; // 名字
|
||||
sex?: number; // 性别
|
||||
birthday?: string | Dayjs; // 出生日期
|
||||
description?: string; // 简介
|
||||
id?: number // 编号
|
||||
name?: string // 名字
|
||||
sex?: number // 性别
|
||||
birthday?: string | number // 出生日期
|
||||
description?: string // 简介
|
||||
demo03courses?: Demo03Course[]
|
||||
demo03grade?: Demo03Grade
|
||||
}
|
||||
|
|
@ -57,7 +56,9 @@ export const Demo03StudentApi = {
|
|||
|
||||
/** 批量删除学生 */
|
||||
deleteDemo03StudentList: async (ids: number[]) => {
|
||||
return await request.delete({ url: `/infra/demo03-student-inner/delete-list?ids=${ids.join(',')}` })
|
||||
return await request.delete({
|
||||
url: `/infra/demo03-student-inner/delete-list?ids=${ids.join(',')}`
|
||||
})
|
||||
},
|
||||
|
||||
// 导出学生 Excel
|
||||
|
|
@ -65,17 +66,21 @@ export const Demo03StudentApi = {
|
|||
return await request.download({ url: `/infra/demo03-student-inner/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(学生课程) ====================
|
||||
// ==================== 子表(学生课程) ====================
|
||||
|
||||
// 获得学生课程列表
|
||||
getDemo03CourseListByStudentId: async (studentId) => {
|
||||
return await request.get({ url: `/infra/demo03-student-inner/demo03-course/list-by-student-id?studentId=` + studentId })
|
||||
return await request.get({
|
||||
url: `/infra/demo03-student-inner/demo03-course/list-by-student-id?studentId=` + studentId
|
||||
})
|
||||
},
|
||||
|
||||
// ==================== 子表(学生班级) ====================
|
||||
// ==================== 子表(学生班级) ====================
|
||||
|
||||
// 获得学生班级
|
||||
getDemo03GradeByStudentId: async (studentId) => {
|
||||
return await request.get({ url: `/infra/demo03-student-inner/demo03-grade/get-by-student-id?studentId=` + studentId })
|
||||
},
|
||||
return await request.get({
|
||||
url: `/infra/demo03-student-inner/demo03-grade/get-by-student-id?studentId=` + studentId
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,28 @@
|
|||
import request from '@/config/axios'
|
||||
import type { Dayjs } from 'dayjs';
|
||||
|
||||
/** 学生课程信息 */
|
||||
export interface Demo03Course {
|
||||
id: number; // 编号
|
||||
studentId?: number; // 学生编号
|
||||
name?: string; // 名字
|
||||
score?: number; // 分数
|
||||
id?: number // 编号
|
||||
studentId?: number // 学生编号
|
||||
name?: string // 名字
|
||||
score?: number // 分数
|
||||
}
|
||||
|
||||
/** 学生班级信息 */
|
||||
export interface Demo03Grade {
|
||||
id: number; // 编号
|
||||
studentId?: number; // 学生编号
|
||||
name?: string; // 名字
|
||||
teacher?: string; // 班主任
|
||||
id?: number // 编号
|
||||
studentId?: number // 学生编号
|
||||
name?: string // 名字
|
||||
teacher?: string // 班主任
|
||||
}
|
||||
|
||||
/** 学生信息 */
|
||||
export interface Demo03Student {
|
||||
id: number; // 编号
|
||||
name?: string; // 名字
|
||||
sex?: number; // 性别
|
||||
birthday?: string | Dayjs; // 出生日期
|
||||
description?: string; // 简介
|
||||
id?: number // 编号
|
||||
name?: string // 名字
|
||||
sex?: number // 性别
|
||||
birthday?: string | number // 出生日期
|
||||
description?: string // 简介
|
||||
demo03courses?: Demo03Course[]
|
||||
demo03grade?: Demo03Grade
|
||||
}
|
||||
|
|
@ -57,7 +56,9 @@ export const Demo03StudentApi = {
|
|||
|
||||
/** 批量删除学生 */
|
||||
deleteDemo03StudentList: async (ids: number[]) => {
|
||||
return await request.delete({ url: `/infra/demo03-student-normal/delete-list?ids=${ids.join(',')}` })
|
||||
return await request.delete({
|
||||
url: `/infra/demo03-student-normal/delete-list?ids=${ids.join(',')}`
|
||||
})
|
||||
},
|
||||
|
||||
// 导出学生 Excel
|
||||
|
|
@ -65,17 +66,21 @@ export const Demo03StudentApi = {
|
|||
return await request.download({ url: `/infra/demo03-student-normal/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(学生课程) ====================
|
||||
// ==================== 子表(学生课程) ====================
|
||||
|
||||
// 获得学生课程列表
|
||||
getDemo03CourseListByStudentId: async (studentId) => {
|
||||
return await request.get({ url: `/infra/demo03-student-normal/demo03-course/list-by-student-id?studentId=` + studentId })
|
||||
return await request.get({
|
||||
url: `/infra/demo03-student-normal/demo03-course/list-by-student-id?studentId=` + studentId
|
||||
})
|
||||
},
|
||||
|
||||
// ==================== 子表(学生班级) ====================
|
||||
// ==================== 子表(学生班级) ====================
|
||||
|
||||
// 获得学生班级
|
||||
getDemo03GradeByStudentId: async (studentId) => {
|
||||
return await request.get({ url: `/infra/demo03-student-normal/demo03-grade/get-by-student-id?studentId=` + studentId })
|
||||
},
|
||||
return await request.get({
|
||||
url: `/infra/demo03-student-normal/demo03-grade/get-by-student-id?studentId=` + studentId
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,3 +66,8 @@ export const runJob = (id: number) => {
|
|||
export const getJobNextTimes = (id: number) => {
|
||||
return request.get({ url: '/infra/job/get_next_times?id=' + id })
|
||||
}
|
||||
|
||||
// 同步定时任务到 Quartz
|
||||
export const syncJob = () => {
|
||||
return request.post({ url: '/infra/job/sync' })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ export interface OtaTask {
|
|||
name: string // 任务名称
|
||||
description?: string // 任务描述
|
||||
firmwareId?: number // 固件编号
|
||||
status: number // 任务状态
|
||||
deviceScope?: number // 升级范围
|
||||
status?: number // 任务状态
|
||||
deviceScope: number // 升级范围
|
||||
deviceIds?: number[] // 指定设备ID列表(当升级范围为指定设备时使用)
|
||||
deviceTotalCount?: number // 设备总共数量
|
||||
deviceSuccessCount?: number // 设备成功数量
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ export interface IotSceneRule {
|
|||
id?: number // 场景编号
|
||||
name: string // 场景名称
|
||||
description?: string // 场景描述
|
||||
lastTriggerTime?: string // 最近触发时间
|
||||
status: number // 场景状态:0-开启,1-关闭
|
||||
triggers: Trigger[] // 触发器数组
|
||||
actions: Action[] // 执行器数组
|
||||
|
|
|
|||
|
|
@ -18,47 +18,35 @@ export interface ThingModelData {
|
|||
service?: ThingModelService // 服务
|
||||
}
|
||||
|
||||
/**
|
||||
* ThingModelProperty 类型
|
||||
*/
|
||||
export interface ThingModelProperty {
|
||||
[key: string]: any
|
||||
}
|
||||
|
||||
/**
|
||||
* ThingModelEvent 类型
|
||||
*/
|
||||
export interface ThingModelEvent {
|
||||
[key: string]: any
|
||||
}
|
||||
|
||||
/**
|
||||
* ThingModelService 类型
|
||||
*/
|
||||
export interface ThingModelService {
|
||||
[key: string]: any
|
||||
}
|
||||
|
||||
/** dataSpecs 数值型数据结构 */
|
||||
export interface DataSpecsNumberData {
|
||||
dataType: 'int' | 'float' | 'double' // 数据类型,取值为 INT、FLOAT 或 DOUBLE
|
||||
max: string // 最大值,必须与 dataType 设置一致,且为 STRING 类型
|
||||
min: string // 最小值,必须与 dataType 设置一致,且为 STRING 类型
|
||||
step: string // 步长,必须与 dataType 设置一致,且为 STRING 类型
|
||||
dataType: string // 数据类型,取值为 INT、FLOAT 或 DOUBLE
|
||||
max?: string // 最大值,必须与 dataType 设置一致,且为 STRING 类型
|
||||
min?: string // 最小值,必须与 dataType 设置一致,且为 STRING 类型
|
||||
step?: string // 步长,必须与 dataType 设置一致,且为 STRING 类型
|
||||
precise?: string // 精度,当 dataType 为 FLOAT 或 DOUBLE 时可选
|
||||
defaultValue?: string // 默认值,可选
|
||||
unit: string // 单位的符号
|
||||
unitName: string // 单位的名称
|
||||
unit?: string // 单位的符号
|
||||
unitName?: string // 单位的名称
|
||||
}
|
||||
|
||||
/** dataSpecs 枚举型数据结构 */
|
||||
export interface DataSpecsEnumOrBoolData {
|
||||
dataType: 'enum' | 'bool'
|
||||
dataType: string
|
||||
defaultValue?: string // 默认值,可选
|
||||
name: string // 枚举项的名称
|
||||
value: number | undefined // 枚举值
|
||||
}
|
||||
|
||||
/** dataSpecs 通用数据结构 */
|
||||
export type ThingModelDataSpecs =
|
||||
| DataSpecsNumberData
|
||||
| DataSpecsEnumOrBoolData
|
||||
| ThingModelDateOrTextDataSpecs
|
||||
| ThingModelArrayDataSpecs
|
||||
| ThingModelStructDataSpecs
|
||||
| Record<string, any>
|
||||
|
||||
/** 物模型TSL响应数据结构 */
|
||||
export interface IotThingModelTSLResp {
|
||||
productId: number
|
||||
|
|
@ -76,8 +64,9 @@ export interface ThingModelProperty {
|
|||
required?: boolean
|
||||
dataType: string
|
||||
description?: string
|
||||
dataSpecs?: ThingModelProperty
|
||||
dataSpecsList?: ThingModelProperty[]
|
||||
dataSpecs?: ThingModelDataSpecs
|
||||
dataSpecsList?: ThingModelPropertyDataSpecs[]
|
||||
value?: number
|
||||
}
|
||||
|
||||
/** 物模型事件 */
|
||||
|
|
@ -110,8 +99,8 @@ export interface ThingModelParam {
|
|||
direction: string
|
||||
paraOrder?: number
|
||||
dataType: string
|
||||
dataSpecs?: ThingModelProperty
|
||||
dataSpecsList?: ThingModelProperty[]
|
||||
dataSpecs?: ThingModelDataSpecs
|
||||
dataSpecsList?: ThingModelPropertyDataSpecs[]
|
||||
}
|
||||
|
||||
/** 数值型数据规范 */
|
||||
|
|
@ -142,24 +131,26 @@ export interface ThingModelDateOrTextDataSpecs {
|
|||
|
||||
/** 数组型数据规范 */
|
||||
export interface ThingModelArrayDataSpecs {
|
||||
dataType: 'array'
|
||||
size: number
|
||||
childDataType: string
|
||||
dataSpecsList?: ThingModelProperty[]
|
||||
dataType: string
|
||||
size?: number
|
||||
childDataType?: string
|
||||
dataSpecsList?: ThingModelPropertyDataSpecs[]
|
||||
}
|
||||
|
||||
/** 结构体型数据规范 */
|
||||
export interface ThingModelStructDataSpecs {
|
||||
dataType: 'struct'
|
||||
identifier: string
|
||||
name: string
|
||||
accessMode: string
|
||||
dataType: string
|
||||
identifier?: string
|
||||
name?: string
|
||||
accessMode?: string
|
||||
required?: boolean
|
||||
childDataType: string
|
||||
dataSpecs?: ThingModelProperty
|
||||
dataSpecsList?: ThingModelProperty[]
|
||||
childDataType?: string
|
||||
dataSpecs?: ThingModelDataSpecs
|
||||
dataSpecsList?: ThingModelPropertyDataSpecs[]
|
||||
}
|
||||
|
||||
export type ThingModelPropertyDataSpecs = ThingModelProperty | DataSpecsEnumOrBoolData
|
||||
|
||||
// IoT 产品物模型 API
|
||||
export const ThingModelApi = {
|
||||
// 查询产品物模型分页
|
||||
|
|
|
|||
|
|
@ -2,11 +2,17 @@ import request from '@/config/axios'
|
|||
|
||||
export interface Favorite {
|
||||
id?: number
|
||||
userId?: string // 用户编号
|
||||
userId?: number // 用户编号
|
||||
spuId?: number | null // 商品 SPU 编号
|
||||
name?: string
|
||||
picUrl?: string
|
||||
price?: number
|
||||
salesCount?: number
|
||||
createTime?: Date
|
||||
status?: number
|
||||
}
|
||||
|
||||
// 获得 ProductFavorite 列表
|
||||
export const getFavoritePage = (params: PageParam) => {
|
||||
return request.get({ url: '/product/favorite/page', params })
|
||||
return request.get<PageResult<Favorite[]>>({ url: '/product/favorite/page', params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,9 +65,9 @@ export const getSpuPage = (params: PageParam) => {
|
|||
return request.get({ url: '/product/spu/page', params })
|
||||
}
|
||||
|
||||
// 获得 Spu 列表 tabsCount
|
||||
export const getTabsCount = () => {
|
||||
return request.get({ url: '/product/spu/get-count' })
|
||||
// 获得 Spu 列表 tabsCount(支持按 name/categoryId/createTime 筛选)
|
||||
export const getTabsCount = (params?: any) => {
|
||||
return request.get({ url: '/product/spu/get-count', params })
|
||||
}
|
||||
|
||||
// 创建商品 Spu
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ export interface CombinationActivityVO {
|
|||
id?: number
|
||||
name?: string
|
||||
spuId?: number
|
||||
spuName?: string
|
||||
picUrl?: string
|
||||
totalLimitCount?: number
|
||||
singleLimitCount?: number
|
||||
startTime?: Date
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@ export interface RewardActivityVO {
|
|||
conditionType?: number
|
||||
productScope?: number
|
||||
rules: RewardRule[]
|
||||
productScopeValues: number[] // 商品范围:值为品类编号列表、商品编号列表
|
||||
// 如下仅用于表单,不提交
|
||||
productScopeValues?: number[] // 商品范围:值为品类编号列表、商品编号列表
|
||||
productCategoryIds?: number[]
|
||||
productSpuIds?: number[]
|
||||
productCategoryIds: number[]
|
||||
productSpuIds: number[]
|
||||
}
|
||||
|
||||
// 优惠规则
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ export interface SeckillActivityVO {
|
|||
id?: number
|
||||
spuId?: number
|
||||
name?: string
|
||||
picUrl?: string
|
||||
status?: number
|
||||
remark?: string
|
||||
startTime?: Date
|
||||
|
|
|
|||
|
|
@ -115,5 +115,7 @@ export const getOrderCountTrendComparison = (
|
|||
|
||||
/** 时间参数需要格式化, 确保接口能识别 */
|
||||
const formatDateParam = (params: TradeTrendReqVO) => {
|
||||
return { times: [formatDate(params.times[0]), formatDate(params.times[1])] } as TradeTrendReqVO
|
||||
return {
|
||||
times: [formatDate(params.times[0]), formatDate(params.times[1])]
|
||||
} as TradeTrendReqVO
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import request from '@/config/axios'
|
||||
import type { OrderItemRespVO, OrderVO } from '@/api/mall/trade/order'
|
||||
|
||||
export interface TradeAfterSaleVO {
|
||||
id?: number | null // 售后编号,主键自增
|
||||
|
|
@ -32,6 +33,21 @@ export interface TradeAfterSaleVO {
|
|||
receiveReason?: string // 收货备注
|
||||
}
|
||||
|
||||
export interface TradeAfterSaleDetailVO extends TradeAfterSaleVO {
|
||||
order: OrderVO
|
||||
orderItem?: OrderItemRespVO
|
||||
user?: {
|
||||
id?: number
|
||||
nickname?: string
|
||||
}
|
||||
logs: Array<{
|
||||
id?: number
|
||||
createTime?: Date
|
||||
content?: string
|
||||
userType?: number
|
||||
}>
|
||||
}
|
||||
|
||||
export interface ProductPropertiesVO {
|
||||
propertyId?: number | null // 属性的编号
|
||||
propertyName?: string // 属性的名称
|
||||
|
|
@ -41,12 +57,15 @@ export interface ProductPropertiesVO {
|
|||
|
||||
// 获得交易售后分页
|
||||
export const getAfterSalePage = async (params) => {
|
||||
return await request.get({ url: `/trade/after-sale/page`, params })
|
||||
return await request.get<PageResult<TradeAfterSaleVO[]>>({
|
||||
url: `/trade/after-sale/page`,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 获得交易售后详情
|
||||
export const getAfterSale = async (id: any) => {
|
||||
return await request.get({ url: `/trade/after-sale/get-detail?id=${id}` })
|
||||
return await request.get<TradeAfterSaleDetailVO>({ url: `/trade/after-sale/get-detail?id=${id}` })
|
||||
}
|
||||
|
||||
// 同意售后
|
||||
|
|
|
|||
|
|
@ -20,12 +20,15 @@ export const createBrokerageUser = (data: any) => {
|
|||
|
||||
// 查询分销用户列表
|
||||
export const getBrokerageUserPage = async (params: any) => {
|
||||
return await request.get({ url: `/trade/brokerage-user/page`, params })
|
||||
return await request.get<PageResult<BrokerageUserVO[]>>({
|
||||
url: `/trade/brokerage-user/page`,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询分销用户详情
|
||||
export const getBrokerageUser = async (id: number) => {
|
||||
return await request.get({ url: `/trade/brokerage-user/get?id=` + id })
|
||||
return await request.get<BrokerageUserVO>({ url: `/trade/brokerage-user/get?id=` + id })
|
||||
}
|
||||
|
||||
// 修改推广员
|
||||
|
|
|
|||
|
|
@ -1,20 +1,28 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ConfigVO {
|
||||
id?: number | null
|
||||
afterSaleRefundReasons: string[]
|
||||
afterSaleReturnReasons: string[]
|
||||
deliveryExpressFreeEnabled: boolean
|
||||
deliveryExpressFreePrice: number
|
||||
deliveryPickUpEnabled: boolean
|
||||
brokerageEnabled: boolean
|
||||
brokerageEnabledCondition: number
|
||||
brokerageBindMode: number
|
||||
brokeragePosterUrls: string
|
||||
brokerageEnabledCondition?: number
|
||||
brokerageBindMode?: number
|
||||
brokeragePosterUrls: string[]
|
||||
brokerageFirstPercent: number
|
||||
brokerageSecondPercent: number
|
||||
brokerageWithdrawMinPrice: number
|
||||
brokerageWithdrawFeePercent: number
|
||||
brokerageFrozenDays: number
|
||||
brokerageWithdrawTypes: string
|
||||
brokerageWithdrawTypes: number[]
|
||||
tencentLbsKey?: string
|
||||
}
|
||||
|
||||
// 查询交易中心配置详情
|
||||
export const getTradeConfig = async () => {
|
||||
return await request.get({ url: `/trade/config/get` })
|
||||
return await request.get<ConfigVO>({ url: `/trade/config/get` })
|
||||
}
|
||||
|
||||
// 保存交易中心配置
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface DeliveryExpressVO {
|
||||
id: number
|
||||
id?: number
|
||||
code: string
|
||||
name: string
|
||||
logo: string
|
||||
|
|
@ -11,17 +11,20 @@ export interface DeliveryExpressVO {
|
|||
|
||||
// 查询快递公司列表
|
||||
export const getDeliveryExpressPage = async (params: PageParam) => {
|
||||
return await request.get({ url: '/trade/delivery/express/page', params })
|
||||
return await request.get<PageResult<DeliveryExpressVO[]>>({
|
||||
url: '/trade/delivery/express/page',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询快递公司详情
|
||||
export const getDeliveryExpress = async (id: number) => {
|
||||
return await request.get({ url: '/trade/delivery/express/get?id=' + id })
|
||||
return await request.get<DeliveryExpressVO>({ url: '/trade/delivery/express/get?id=' + id })
|
||||
}
|
||||
|
||||
// 获得快递公司精简信息列表
|
||||
export const getSimpleDeliveryExpressList = () => {
|
||||
return request.get({ url: '/trade/delivery/express/list-all-simple' })
|
||||
return request.get<DeliveryExpressVO[]>({ url: '/trade/delivery/express/list-all-simple' })
|
||||
}
|
||||
|
||||
// 新增快递公司
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface DeliveryExpressTemplateVO {
|
||||
id: number
|
||||
id?: number
|
||||
name: string
|
||||
chargeMode: number
|
||||
sort: number
|
||||
templateCharge: ExpressTemplateChargeVO[]
|
||||
templateFree: ExpressTemplateFreeVO[]
|
||||
charges: ExpressTemplateChargeVO[]
|
||||
frees: ExpressTemplateFreeVO[]
|
||||
}
|
||||
|
||||
export declare type ExpressTemplateChargeVO = {
|
||||
|
|
@ -25,17 +25,24 @@ export declare type ExpressTemplateFreeVO = {
|
|||
|
||||
// 查询快递运费模板列表
|
||||
export const getDeliveryExpressTemplatePage = async (params: PageParam) => {
|
||||
return await request.get({ url: '/trade/delivery/express-template/page', params })
|
||||
return await request.get<PageResult<DeliveryExpressTemplateVO[]>>({
|
||||
url: '/trade/delivery/express-template/page',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询快递运费模板详情
|
||||
export const getDeliveryExpressTemplate = async (id: number) => {
|
||||
return await request.get({ url: '/trade/delivery/express-template/get?id=' + id })
|
||||
return await request.get<DeliveryExpressTemplateVO>({
|
||||
url: '/trade/delivery/express-template/get?id=' + id
|
||||
})
|
||||
}
|
||||
|
||||
// 查询快递运费模板详情
|
||||
export const getSimpleTemplateList = async () => {
|
||||
return await request.get({ url: '/trade/delivery/express-template/list-all-simple' })
|
||||
return await request.get<DeliveryExpressTemplateVO[]>({
|
||||
url: '/trade/delivery/express-template/list-all-simple'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增快递运费模板
|
||||
|
|
|
|||
|
|
@ -1,34 +1,48 @@
|
|||
import request from '@/config/axios'
|
||||
import type { UserVO } from '@/api/system/user'
|
||||
|
||||
export interface DeliveryPickUpStoreVO {
|
||||
id: number
|
||||
id?: number
|
||||
name: string
|
||||
introduction: string
|
||||
phone: string
|
||||
areaId: number
|
||||
areaId?: number
|
||||
detailAddress: string
|
||||
logo: string
|
||||
openingTime: string
|
||||
closingTime: string
|
||||
latitude: number
|
||||
longitude: number
|
||||
openingTime?: string
|
||||
closingTime?: string
|
||||
latitude?: number
|
||||
longitude?: number
|
||||
status: number
|
||||
verifyUserIds: number[] // 绑定用户编号组数
|
||||
verifyUserIds?: number[] // 绑定用户编号组数
|
||||
verifyUsers?: UserVO[] // 绑定用户列表
|
||||
}
|
||||
|
||||
export interface DeliveryPickUpStoreBindReqVO {
|
||||
id: number
|
||||
verifyUserIds: number[]
|
||||
}
|
||||
|
||||
// 查询自提门店列表
|
||||
export const getDeliveryPickUpStorePage = async (params: any) => {
|
||||
return await request.get({ url: '/trade/delivery/pick-up-store/page', params })
|
||||
return await request.get<PageResult<DeliveryPickUpStoreVO[]>>({
|
||||
url: '/trade/delivery/pick-up-store/page',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询自提门店详情
|
||||
export const getDeliveryPickUpStore = async (id: number) => {
|
||||
return await request.get({ url: '/trade/delivery/pick-up-store/get?id=' + id })
|
||||
return await request.get<DeliveryPickUpStoreVO>({
|
||||
url: '/trade/delivery/pick-up-store/get?id=' + id
|
||||
})
|
||||
}
|
||||
|
||||
// 查询自提门店精简列表
|
||||
export const getSimpleDeliveryPickUpStoreList = async (): Promise<DeliveryPickUpStoreVO[]> => {
|
||||
return await request.get({ url: '/trade/delivery/pick-up-store/simple-list' })
|
||||
export const getSimpleDeliveryPickUpStoreList = async () => {
|
||||
return await request.get<DeliveryPickUpStoreVO[]>({
|
||||
url: '/trade/delivery/pick-up-store/simple-list'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增自提门店
|
||||
|
|
@ -47,6 +61,6 @@ export const deleteDeliveryPickUpStore = async (id: number) => {
|
|||
}
|
||||
|
||||
// 绑定自提店员
|
||||
export const bindStoreStaffId = async (data: any) => {
|
||||
export const bindStoreStaffId = async (data: DeliveryPickUpStoreBindReqVO) => {
|
||||
return await request.post({ url: '/trade/delivery/pick-up-store/bind', data })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ export interface TradeOrderSummaryRespVO {
|
|||
|
||||
// 查询交易订单列表
|
||||
export const getOrderPage = async (params: any) => {
|
||||
return await request.get({ url: `/trade/order/page`, params })
|
||||
return await request.get<PageResult<OrderVO[]>>({ url: `/trade/order/page`, params })
|
||||
}
|
||||
|
||||
// 查询交易订单统计
|
||||
|
|
@ -132,12 +132,14 @@ export const getOrderSummary = async (params: any) => {
|
|||
|
||||
// 查询交易订单详情
|
||||
export const getOrder = async (id: number | null) => {
|
||||
return await request.get({ url: `/trade/order/get-detail?id=` + id })
|
||||
return await request.get<OrderVO>({ url: `/trade/order/get-detail?id=` + id })
|
||||
}
|
||||
|
||||
// 查询交易订单物流详情
|
||||
export const getExpressTrackList = async (id: number | null) => {
|
||||
return await request.get({ url: `/trade/order/get-express-track-list?id=` + id })
|
||||
return await request.get<Array<{ time?: Date | string; content?: string }>>({
|
||||
url: `/trade/order/get-express-track-list?id=` + id
|
||||
})
|
||||
}
|
||||
|
||||
export interface DeliveryVO {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ConfigVO {
|
||||
id: number
|
||||
pointTradeDeductEnable: number
|
||||
id?: number
|
||||
pointTradeDeductEnable: boolean
|
||||
pointTradeDeductUnitPrice: number
|
||||
pointTradeDeductMaxPrice: number
|
||||
pointTradeGivePoint: number
|
||||
|
|
@ -10,7 +10,7 @@ export interface ConfigVO {
|
|||
|
||||
// 查询积分设置详情
|
||||
export const getConfig = async () => {
|
||||
return await request.get({ url: `/member/config/get` })
|
||||
return await request.get<ConfigVO>({ url: `/member/config/get` })
|
||||
}
|
||||
|
||||
// 新增修改积分设置
|
||||
|
|
|
|||
|
|
@ -13,10 +13,13 @@ export interface ExperienceRecordVO {
|
|||
|
||||
// 查询会员经验记录列表
|
||||
export const getExperienceRecordPage = async (params) => {
|
||||
return await request.get({ url: `/member/experience-record/page`, params })
|
||||
return await request.get<PageResult<ExperienceRecordVO[]>>({
|
||||
url: `/member/experience-record/page`,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询会员经验记录详情
|
||||
export const getExperienceRecord = async (id: number) => {
|
||||
return await request.get({ url: `/member/experience-record/get?id=` + id })
|
||||
return await request.get<ExperienceRecordVO>({ url: `/member/experience-record/get?id=` + id })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,36 +1,51 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface UserVO {
|
||||
id?: number
|
||||
avatar?: string
|
||||
birthday?: number
|
||||
createTime?: number
|
||||
loginDate?: number
|
||||
loginIp?: string
|
||||
mark?: string
|
||||
mobile?: string
|
||||
email?: string
|
||||
password?: string
|
||||
name?: string
|
||||
nickname?: string
|
||||
registerIp?: string
|
||||
sex?: number
|
||||
status?: number
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
tagIds?: number[]
|
||||
groupId?: number
|
||||
levelId?: number
|
||||
levelName?: string | null
|
||||
point?: number | null
|
||||
totalPoint?: number | null
|
||||
experience?: number | null
|
||||
}
|
||||
|
||||
export interface UserLevelUpdateReqVO {
|
||||
id: number
|
||||
avatar: string | undefined
|
||||
birthday: number | undefined
|
||||
createTime: number | undefined
|
||||
loginDate: number | undefined
|
||||
loginIp: string
|
||||
mark: string
|
||||
mobile: string
|
||||
email: string | undefined
|
||||
name: string | undefined
|
||||
nickname: string | undefined
|
||||
registerIp: string
|
||||
sex: number
|
||||
status: number
|
||||
areaId: number | undefined
|
||||
areaName: string | undefined
|
||||
levelName: string | null
|
||||
point: number | undefined | null
|
||||
totalPoint: number | undefined | null
|
||||
experience: number | null | undefined
|
||||
levelId: number
|
||||
reason: string
|
||||
}
|
||||
|
||||
export interface UserPointUpdateReqVO {
|
||||
id: number
|
||||
point: number
|
||||
}
|
||||
|
||||
// 查询会员用户列表
|
||||
export const getUserPage = async (params) => {
|
||||
return await request.get({ url: `/member/user/page`, params })
|
||||
return await request.get<PageResult<UserVO[]>>({ url: `/member/user/page`, params })
|
||||
}
|
||||
|
||||
// 查询会员用户详情
|
||||
export const getUser = async (id: number) => {
|
||||
return await request.get({ url: `/member/user/get?id=` + id })
|
||||
return await request.get<UserVO>({ url: `/member/user/get?id=` + id })
|
||||
}
|
||||
|
||||
// 修改会员用户
|
||||
|
|
@ -39,11 +54,11 @@ export const updateUser = async (data: UserVO) => {
|
|||
}
|
||||
|
||||
// 修改会员用户等级
|
||||
export const updateUserLevel = async (data: any) => {
|
||||
export const updateUserLevel = async (data: UserLevelUpdateReqVO) => {
|
||||
return await request.put({ url: `/member/user/update-level`, data })
|
||||
}
|
||||
|
||||
// 修改会员用户积分
|
||||
export const updateUserPoint = async (data: any) => {
|
||||
export const updateUserPoint = async (data: UserPointUpdateReqVO) => {
|
||||
return await request.put({ url: `/member/user/update-point`, data })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@ import request from '@/config/axios'
|
|||
|
||||
// MES 物料产品分类 VO
|
||||
export interface MdItemTypeVO {
|
||||
id: number // 分类编号
|
||||
parentId: number // 父分类编号
|
||||
code: string // 分类编码
|
||||
name: string // 分类名称
|
||||
id?: number // 分类编号
|
||||
parentId?: number // 父分类编号
|
||||
code?: string // 分类编码
|
||||
name?: string // 分类名称
|
||||
itemOrProduct: string // 物料/产品标识
|
||||
sort: number // 显示排序
|
||||
status: number // 状态
|
||||
remark: string // 备注
|
||||
remark?: string // 备注
|
||||
}
|
||||
|
||||
// MES 物料产品分类 API
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@ import request from '@/config/axios'
|
|||
|
||||
// MES 计量单位 VO
|
||||
export interface MdUnitMeasureVO {
|
||||
id: number // 单位编号
|
||||
code: string // 单位编码
|
||||
name: string // 单位名称
|
||||
id?: number // 单位编号
|
||||
code?: string // 单位编码
|
||||
name?: string // 单位名称
|
||||
primaryFlag: boolean // 是否主单位
|
||||
primaryId: number // 主单位编号
|
||||
changeRate: number // 与主单位换算比例
|
||||
primaryId?: number // 主单位编号
|
||||
changeRate?: number // 与主单位换算比例
|
||||
status: number // 状态
|
||||
remark: string // 备注
|
||||
remark?: string // 备注
|
||||
}
|
||||
|
||||
// MES 计量单位 API
|
||||
|
|
|
|||
|
|
@ -13,6 +13,20 @@ export interface WmSnGroupVO {
|
|||
createTime?: Date
|
||||
}
|
||||
|
||||
export interface WmSnVO {
|
||||
id?: number
|
||||
uuid?: string
|
||||
code?: string
|
||||
itemId?: number
|
||||
itemCode?: string
|
||||
itemName?: string
|
||||
specification?: string
|
||||
unitName?: string
|
||||
batchCode?: string
|
||||
workOrderId?: number
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
export interface WmSnGenerateVO {
|
||||
itemId?: number
|
||||
batchCode?: string
|
||||
|
|
@ -30,6 +44,11 @@ export const getSnGroupPage = async (params: any) => {
|
|||
return await request.get({ url: `/mes/wm/sn/group-page`, params })
|
||||
}
|
||||
|
||||
// 获得批次 SN 码明细列表
|
||||
export const getSnListByUuid = async (uuid: string) => {
|
||||
return await request.get({ url: `/mes/wm/sn/list-by-uuid`, params: { uuid } })
|
||||
}
|
||||
|
||||
// 批量删除 SN 码(按批次 UUID)
|
||||
export const deleteSnBatch = async (uuid: string) => {
|
||||
return await request.delete({ url: `/mes/wm/sn/delete-batch`, params: { uuid } })
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@ export interface TagVO {
|
|||
createTime: Date
|
||||
}
|
||||
|
||||
export interface SimpleTagVO {
|
||||
tagId: number
|
||||
name: string
|
||||
}
|
||||
|
||||
// 创建公众号标签
|
||||
export const createTag = (data: TagVO) => {
|
||||
return request.post({
|
||||
|
|
@ -47,7 +52,7 @@ export const getTagPage = (query: PageParam) => {
|
|||
|
||||
// 获取公众号标签精简信息列表
|
||||
export const getSimpleTagList = () => {
|
||||
return request.get({
|
||||
return request.get<SimpleTagVO[]>({
|
||||
url: '/mp/tag/list-all-simple'
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ export const deleteApp = (id: number) => {
|
|||
|
||||
// 获得支付应用列表
|
||||
export const getAppList = () => {
|
||||
return request.get({
|
||||
return request.get<AppVO[]>({
|
||||
url: '/pay/app/list'
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,43 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface NotifyLogVO {
|
||||
id?: number
|
||||
status?: number
|
||||
notifyTimes?: number
|
||||
lastExecuteTime?: Date
|
||||
createTime?: Date
|
||||
response?: string
|
||||
}
|
||||
|
||||
export interface NotifyTaskVO {
|
||||
id?: number
|
||||
appId?: number
|
||||
appName?: string
|
||||
merchantOrderId?: string
|
||||
merchantRefundId?: string
|
||||
merchantTransferId?: string
|
||||
dataId?: number
|
||||
type?: number
|
||||
status?: number
|
||||
notifyTimes?: number
|
||||
maxNotifyTimes?: number
|
||||
lastExecuteTime?: Date
|
||||
nextNotifyTime?: Date
|
||||
createTime?: Date
|
||||
updateTime?: Date
|
||||
logs?: NotifyLogVO[]
|
||||
}
|
||||
|
||||
// 获得支付通知明细
|
||||
export const getNotifyTaskDetail = (id) => {
|
||||
return request.get({
|
||||
export const getNotifyTaskDetail = (id: number) => {
|
||||
return request.get<NotifyTaskVO>({
|
||||
url: '/pay/notify/get-detail?id=' + id
|
||||
})
|
||||
}
|
||||
|
||||
// 获得支付通知分页
|
||||
export const getNotifyTaskPage = (query) => {
|
||||
return request.get({
|
||||
export const getNotifyTaskPage = (query: any) => {
|
||||
return request.get<PageResult<NotifyTaskVO[]>>({
|
||||
url: '/pay/notify/page',
|
||||
params: query
|
||||
})
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ export interface OrderVO {
|
|||
notifyUrl: string
|
||||
notifyStatus: number
|
||||
amount: number
|
||||
price: number
|
||||
channelFeeRate: number
|
||||
channelFeeAmount: number
|
||||
status: number
|
||||
|
|
@ -28,64 +29,43 @@ export interface OrderVO {
|
|||
createTime: Date
|
||||
}
|
||||
|
||||
export interface OrderPageReqVO extends PageParam {
|
||||
merchantId?: number
|
||||
appId?: number
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
export interface OrderDetailVO {
|
||||
merchantOrderId?: string
|
||||
no?: string
|
||||
appId?: number
|
||||
appName?: string
|
||||
status?: number
|
||||
price?: number
|
||||
refundPrice?: number
|
||||
channelFeePrice?: number
|
||||
channelFeeRate?: number
|
||||
successTime?: Date
|
||||
expireTime?: Date
|
||||
createTime?: Date
|
||||
updateTime?: Date
|
||||
subject?: string
|
||||
body?: string
|
||||
notifyUrl?: string
|
||||
notifyStatus?: number
|
||||
amount?: number
|
||||
channelFeeRate?: number
|
||||
channelFeeAmount?: number
|
||||
status?: number
|
||||
expireTime?: Date[]
|
||||
successTime?: Date[]
|
||||
notifyTime?: Date[]
|
||||
successExtensionId?: number
|
||||
refundStatus?: number
|
||||
refundTimes?: number
|
||||
channelUserId?: string
|
||||
channelOrderNo?: string
|
||||
createTime?: Date[]
|
||||
}
|
||||
|
||||
export interface OrderExportReqVO {
|
||||
merchantId?: number
|
||||
appId?: number
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
merchantOrderId?: string
|
||||
subject?: string
|
||||
body?: string
|
||||
notifyUrl?: string
|
||||
notifyStatus?: number
|
||||
amount?: number
|
||||
channelFeeRate?: number
|
||||
channelFeeAmount?: number
|
||||
status?: number
|
||||
expireTime?: Date[]
|
||||
successTime?: Date[]
|
||||
notifyTime?: Date[]
|
||||
successExtensionId?: number
|
||||
refundStatus?: number
|
||||
refundTimes?: number
|
||||
channelUserId?: string
|
||||
userIp?: string
|
||||
channelOrderNo?: string
|
||||
createTime?: Date[]
|
||||
channelUserId?: string
|
||||
notifyUrl?: string
|
||||
extension?: {
|
||||
channelNotifyData?: string
|
||||
}
|
||||
}
|
||||
|
||||
// 查询列表支付订单
|
||||
export const getOrderPage = async (params: OrderPageReqVO) => {
|
||||
return await request.get({ url: '/pay/order/page', params })
|
||||
export const getOrderPage = async (params: any) => {
|
||||
return await request.get<PageResult<OrderDetailVO[]>>({
|
||||
url: '/pay/order/page',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询详情支付订单
|
||||
export const getOrder = async (id: number, sync?: boolean) => {
|
||||
return await request.get({
|
||||
return await request.get<OrderVO>({
|
||||
url: '/pay/order/get',
|
||||
params: {
|
||||
id,
|
||||
|
|
@ -96,7 +76,7 @@ export const getOrder = async (id: number, sync?: boolean) => {
|
|||
|
||||
// 获得支付订单的明细
|
||||
export const getOrderDetail = async (id: number) => {
|
||||
return await request.get({ url: '/pay/order/get-detail?id=' + id })
|
||||
return await request.get<OrderDetailVO>({ url: '/pay/order/get-detail?id=' + id })
|
||||
}
|
||||
|
||||
// 提交支付订单
|
||||
|
|
@ -105,6 +85,6 @@ export const submitOrder = async (data: any) => {
|
|||
}
|
||||
|
||||
// 导出支付订单
|
||||
export const exportOrder = async (params: OrderExportReqVO) => {
|
||||
export const exportOrder = async (params: any) => {
|
||||
return await request.download({ url: '/pay/order/export-excel', params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,70 +29,36 @@ export interface RefundVO {
|
|||
createTime: Date
|
||||
}
|
||||
|
||||
export interface RefundPageReqVO extends PageParam {
|
||||
merchantId?: number
|
||||
appId?: number
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
orderId?: string
|
||||
tradeNo?: string
|
||||
export interface RefundDetailVO {
|
||||
merchantRefundId?: string
|
||||
channelRefundNo?: string
|
||||
merchantOrderId?: string
|
||||
merchantRefundNo?: string
|
||||
notifyUrl?: string
|
||||
notifyStatus?: number
|
||||
channelOrderNo?: string
|
||||
appId?: number
|
||||
appName?: string
|
||||
payPrice?: number
|
||||
refundPrice?: number
|
||||
status?: number
|
||||
type?: number
|
||||
payAmount?: number
|
||||
refundAmount?: number
|
||||
successTime?: Date
|
||||
createTime?: Date
|
||||
updateTime?: Date
|
||||
channelCode?: string
|
||||
reason?: string
|
||||
userIp?: string
|
||||
channelOrderNo?: string
|
||||
channelRefundNo?: string
|
||||
channelErrorCode?: string
|
||||
channelErrorMsg?: string
|
||||
channelExtras?: string
|
||||
expireTime?: Date[]
|
||||
successTime?: Date[]
|
||||
notifyTime?: Date[]
|
||||
createTime?: Date[]
|
||||
}
|
||||
|
||||
export interface PayRefundExportReqVO {
|
||||
merchantId?: number
|
||||
appId?: number
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
orderId?: string
|
||||
tradeNo?: string
|
||||
merchantOrderId?: string
|
||||
merchantRefundNo?: string
|
||||
notifyUrl?: string
|
||||
notifyStatus?: number
|
||||
status?: number
|
||||
type?: number
|
||||
payAmount?: number
|
||||
refundAmount?: number
|
||||
reason?: string
|
||||
userIp?: string
|
||||
channelOrderNo?: string
|
||||
channelRefundNo?: string
|
||||
channelErrorCode?: string
|
||||
channelErrorMsg?: string
|
||||
channelExtras?: string
|
||||
expireTime?: Date[]
|
||||
successTime?: Date[]
|
||||
notifyTime?: Date[]
|
||||
createTime?: Date[]
|
||||
channelNotifyData?: string
|
||||
}
|
||||
|
||||
// 查询列表退款订单
|
||||
export const getRefundPage = (params: RefundPageReqVO) => {
|
||||
return request.get({ url: '/pay/refund/page', params })
|
||||
export const getRefundPage = (params: any) => {
|
||||
return request.get<PageResult<RefundDetailVO[]>>({ url: '/pay/refund/page', params })
|
||||
}
|
||||
|
||||
// 查询详情退款订单
|
||||
export const getRefund = (id: number) => {
|
||||
return request.get({ url: '/pay/refund/get?id=' + id })
|
||||
return request.get<RefundDetailVO>({ url: '/pay/refund/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增退款订单
|
||||
|
|
@ -111,6 +77,6 @@ export const deleteRefund = (id: number) => {
|
|||
}
|
||||
|
||||
// 导出退款订单
|
||||
export const exportRefund = (params: PayRefundExportReqVO) => {
|
||||
export const exportRefund = (params: any) => {
|
||||
return request.download({ url: '/pay/refund/export-excel', params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,42 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface TransferVO {
|
||||
id?: number
|
||||
no?: string
|
||||
appId?: number
|
||||
appName?: string
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
merchantTransferId?: string
|
||||
type?: string
|
||||
status?: number
|
||||
successTime?: Date
|
||||
price?: number
|
||||
subject?: string
|
||||
userName?: string
|
||||
userAccount?: string
|
||||
accountNo?: string
|
||||
channelTransferNo?: string
|
||||
userIp?: string
|
||||
notifyUrl?: string
|
||||
channelNotifyData?: string
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 查询转账单列表
|
||||
export const getTransferPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/pay/transfer/page`, params })
|
||||
export const getTransferPage = async (params: any) => {
|
||||
return await request.get<PageResult<TransferVO[]>>({
|
||||
url: `/pay/transfer/page`,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询转账单详情
|
||||
export const getTransfer = async (id: number) => {
|
||||
return await request.get({ url: '/pay/transfer/get?id=' + id })
|
||||
return await request.get<TransferVO>({ url: '/pay/transfer/get?id=' + id })
|
||||
}
|
||||
|
||||
// 导出转账单
|
||||
export const exportTransfer = async (params: PageParam) => {
|
||||
export const exportTransfer = async (params: any) => {
|
||||
return await request.download({ url: '/pay/transfer/export-excel', params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,12 @@ export interface WalletVO {
|
|||
freezePrice: number
|
||||
}
|
||||
|
||||
/** 修改会员钱包余额 Request VO */
|
||||
export interface WalletBalanceUpdateReqVO {
|
||||
userId: number
|
||||
balance: number
|
||||
}
|
||||
|
||||
/** 查询用户钱包详情 */
|
||||
export const getWallet = async (params: PayWalletUserReqVO) => {
|
||||
return await request.get<WalletVO>({ url: `/pay/wallet/get`, params })
|
||||
|
|
@ -27,6 +33,6 @@ export const getWalletPage = async (params: any) => {
|
|||
}
|
||||
|
||||
/** 修改会员钱包余额 */
|
||||
export const updateWalletBalance = async (data: any) => {
|
||||
export const updateWalletBalance = async (data: WalletBalanceUpdateReqVO) => {
|
||||
return await request.put({ url: `/pay/wallet/update-balance`, data })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ export interface DeptVO {
|
|||
phone: string
|
||||
email: string
|
||||
createTime: Date
|
||||
children?: DeptVO[]
|
||||
}
|
||||
|
||||
// 查询部门(精简)列表
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface DictDataVO {
|
||||
id: number
|
||||
sort: number
|
||||
id?: number
|
||||
sort?: number
|
||||
label: string
|
||||
value: string
|
||||
dictType: string
|
||||
|
|
@ -10,7 +10,7 @@ export interface DictDataVO {
|
|||
colorType: string
|
||||
cssClass: string
|
||||
remark: string
|
||||
createTime: Date
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 查询字典数据(精简)列表
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface DictTypeVO {
|
||||
id: number
|
||||
id?: number
|
||||
name: string
|
||||
type: string
|
||||
status: number
|
||||
remark: string
|
||||
createTime: Date
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 查询字典(精简)列表
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface MailAccountVO {
|
||||
id: number
|
||||
id?: number
|
||||
mail: string
|
||||
username: string
|
||||
password: string
|
||||
|
|
@ -38,7 +38,10 @@ export const deleteMailAccount = async (id: number) => {
|
|||
|
||||
// 批量删除邮箱账号
|
||||
export const deleteMailAccountList = async (ids: number[]) => {
|
||||
return await request.delete({ url: '/system/mail-account/delete-list', params: { ids: ids.join(',') } })
|
||||
return await request.delete({
|
||||
url: '/system/mail-account/delete-list',
|
||||
params: { ids: ids.join(',') }
|
||||
})
|
||||
}
|
||||
|
||||
// 获得邮箱账号精简列表
|
||||
|
|
|
|||
|
|
@ -48,5 +48,8 @@ export const deleteOAuth2Client = (id: number) => {
|
|||
|
||||
// 批量删除 OAuth2 客户端
|
||||
export const deleteOAuth2ClientList = (ids: number[]) => {
|
||||
return request.delete({ url: '/system/oauth2-client/delete-list', params: { ids: ids.join(',') } })
|
||||
return request.delete({
|
||||
url: '/system/oauth2-client/delete-list',
|
||||
params: { ids: ids.join(',') }
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,10 @@ export const deleteTenantPackage = (id: number) => {
|
|||
|
||||
// 批量删除租户套餐
|
||||
export const deleteTenantPackageList = (ids: number[]) => {
|
||||
return request.delete({ url: '/system/tenant-package/delete-list', params: { ids: ids.join(',') } })
|
||||
return request.delete({
|
||||
url: '/system/tenant-package/delete-list',
|
||||
params: { ids: ids.join(',') }
|
||||
})
|
||||
}
|
||||
|
||||
// 获取租户套餐精简信息列表
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ export interface UserVO {
|
|||
username: string
|
||||
nickname: string
|
||||
deptId: number
|
||||
deptName?: string
|
||||
postIds: string[]
|
||||
email: string
|
||||
mobile: string
|
||||
|
|
@ -15,7 +16,24 @@ export interface UserVO {
|
|||
remark: string
|
||||
loginDate: Date
|
||||
createTime: Date
|
||||
disabled?: boolean
|
||||
}
|
||||
|
||||
// 获取用户精简信息列表
|
||||
export const getSimpleUserList = (): Promise<UserVO[]> => {
|
||||
return request.get({ url: '/system/user/simple-list' })
|
||||
}
|
||||
|
||||
// 按用户编号查询用户精简信息(点头像弹名片)
|
||||
export const getSimpleUser = (id: number | string) => {
|
||||
return request.get<UserVO>({ url: '/system/user/get-simple', params: { id } })
|
||||
}
|
||||
|
||||
// 按昵称模糊搜索用户(加好友)
|
||||
export const getSimpleUserListByNickname = (nickname: string) => {
|
||||
return request.get<UserVO[]>({
|
||||
url: '/system/user/list-by-nickname',
|
||||
params: { nickname }
|
||||
})
|
||||
}
|
||||
|
||||
// 查询用户管理列表
|
||||
|
|
@ -80,8 +98,3 @@ export const updateUserStatus = (id: number, status: number) => {
|
|||
}
|
||||
return request.put({ url: '/system/user/update-status', data: data })
|
||||
}
|
||||
|
||||
// 获取用户精简信息列表
|
||||
export const getSimpleUserList = (): Promise<UserVO[]> => {
|
||||
return request.get({ url: '/system/user/simple-list' })
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue