Compare commits
480 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 | |
|
|
37c70daaaf | |
|
|
944dd34d9e | |
|
|
ff3c7884cc | |
|
|
595b8c5bb4 | |
|
|
e6c0976c52 | |
|
|
ed31f0d3c1 | |
|
|
2e68890c7d | |
|
|
8405a07dd0 | |
|
|
1b7fb5ed5d | |
|
|
aff1439629 | |
|
|
9a4f9b6995 | |
|
|
d08413a68e | |
|
|
89a49cf19c | |
|
|
763e11eb78 | |
|
|
664904bd06 | |
|
|
811b93d9f1 | |
|
|
e80e5203a4 | |
|
|
c8b132433a | |
|
|
57596361ef | |
|
|
685ada8475 | |
|
|
e1b8370267 | |
|
|
a4dfb717aa | |
|
|
06a008b030 | |
|
|
f3807e30d5 | |
|
|
dc1a582fbd | |
|
|
8b06efe5ee | |
|
|
309a4bf4d0 | |
|
|
2ede2b371f | |
|
|
00f273ca77 | |
|
|
dd009a1de0 | |
|
|
fa42f8e574 | |
|
|
a1c43ed427 | |
|
|
31a7f6248a | |
|
|
02c0d0cb3b | |
|
|
a2fbf5b712 | |
|
|
cb78c2935d | |
|
|
798318ef7d | |
|
|
8971c37059 | |
|
|
7dd7309e9c | |
|
|
1612e3e1b6 | |
|
|
72d8c499a4 | |
|
|
fa653ac887 | |
|
|
1888757854 | |
|
|
38ecc4f40c | |
|
|
9893aedbb2 | |
|
|
5a983bb1eb | |
|
|
b5bc537f86 | |
|
|
fead282395 | |
|
|
73aa578c9b | |
|
|
7a236b4378 | |
|
|
1015423431 | |
|
|
3949e0c89f | |
|
|
29b257b8cd | |
|
|
1e08e9fbca | |
|
|
69653163b0 | |
|
|
8468d9bf4d | |
|
|
f7cda1fc4e | |
|
|
fee633b0c8 | |
|
|
b63492199a | |
|
|
c6b6e723e0 | |
|
|
0a07d4a2e4 | |
|
|
fc812aef26 | |
|
|
f26c65c03f | |
|
|
30b963149a | |
|
|
9a36cfe933 | |
|
|
94e5fc00ac | |
|
|
2442a01e48 | |
|
|
bfd407d75b | |
|
|
b6d123ac72 | |
|
|
5ebbbf7499 | |
|
|
8ad7180c2b | |
|
|
f5bcaf22f9 | |
|
|
40d762070f | |
|
|
7fa9311753 | |
|
|
60c74b991e | |
|
|
c4519a8696 | |
|
|
b52ad0c34b | |
|
|
5c2ee259a6 | |
|
|
8329a6a885 | |
|
|
073c54bc1d | |
|
|
f58d1d88c8 | |
|
|
f6963cde37 | |
|
|
0c54bf28b3 | |
|
|
d0cd93de5a | |
|
|
a2d043bc72 | |
|
|
7622a44bbb | |
|
|
12a41da241 | |
|
|
ae7f3a8bc5 | |
|
|
b9b085f1ee | |
|
|
dc318c8e75 | |
|
|
6cd49f0ce4 | |
|
|
85207bec98 | |
|
|
46c436e0df | |
|
|
5d222bdf48 | |
|
|
ceb1aa9bce | |
|
|
26a3b87114 | |
|
|
03d0ce800d | |
|
|
a3f89d686c | |
|
|
68922ebf02 | |
|
|
e629ac3825 | |
|
|
8b4351e4f3 | |
|
|
28473434da | |
|
|
1f47e3c9d6 | |
|
|
4f4c64cfff | |
|
|
9a49c2df20 | |
|
|
9b8b1322b7 | |
|
|
ecb15b6481 | |
|
|
a18c81511c | |
|
|
b3bb1114ba | |
|
|
50cfbfe58b | |
|
|
c81116678a | |
|
|
fa570c2637 | |
|
|
2ffbcbd71f | |
|
|
524ed28973 | |
|
|
508d06b493 | |
|
|
f82ae7e0c8 | |
|
|
24343f66fc | |
|
|
52972506a8 | |
|
|
d128df618e | |
|
|
5f944548a3 | |
|
|
7bae330828 | |
|
|
7ff8cb78e1 | |
|
|
8252f7b068 | |
|
|
19db64c08a | |
|
|
e0352af8b0 | |
|
|
ae54f938cf | |
|
|
b455ce4949 | |
|
|
58537a34c7 | |
|
|
4a811fb0bb | |
|
|
804ad667e0 | |
|
|
eaedb1e0ca | |
|
|
e579a4de13 | |
|
|
df013ac69c | |
|
|
6f96d004a9 | |
|
|
44808eb3f4 | |
|
|
a7911bcbcf | |
|
|
a170ae37ab | |
|
|
841d2cb763 | |
|
|
8d06f87e0f | |
|
|
fdbb98fe65 | |
|
|
c5948d405e | |
|
|
70aff05ef5 | |
|
|
b3b35e147b | |
|
|
765c8ea94f | |
|
|
ac49ba5c6d | |
|
|
3ef4e8424f | |
|
|
c865dfe488 | |
|
|
18e5c97bf3 | |
|
|
680c0e0e8b | |
|
|
38cb980ce4 | |
|
|
0be2674277 | |
|
|
f0cd639137 | |
|
|
314293ced3 | |
|
|
32bbd912a2 | |
|
|
32442830b0 | |
|
|
711d5abc0a | |
|
|
4da16e95f5 | |
|
|
d890781149 | |
|
|
30e4fef7bb | |
|
|
1aad2f1648 | |
|
|
c3737d3b7a | |
|
|
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 | |
|
|
81711a98c9 | |
|
|
766b3906fa | |
|
|
cd63cf2b34 | |
|
|
84ae85f545 | |
|
|
78b6679e63 | |
|
|
ee5ed1f97b | |
|
|
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 | |
|
|
14edd68d77 | |
|
|
968a1ccb40 | |
|
|
c163ed152c | |
|
|
2499d59f28 | |
|
|
176cddc21f | |
|
|
5959539a03 | |
|
|
26c7544829 | |
|
|
c792f5fa0f | |
|
|
f497bf8e23 | |
|
|
eade6bd9a4 | |
|
|
91c97d7302 | |
|
|
27b3c36976 | |
|
|
bfcce06577 | |
|
|
a997f25f98 | |
|
|
52e538aa43 | |
|
|
c4908548a1 | |
|
|
2520de56b4 | |
|
|
860d2c0b29 | |
|
|
53a1024c11 | |
|
|
037b465a64 | |
|
|
ac6097aa9a | |
|
|
cb5f0fb3f0 | |
|
|
49f0fb06f4 | |
|
|
c0845eae75 | |
|
|
e31423bc6d | |
|
|
5284b00706 | |
|
|
550c30eae4 | |
|
|
fd11e07e92 | |
|
|
f4b8fea579 | |
|
|
6ffcbbc1d2 | |
|
|
53f779afa2 | |
|
|
643eb92aff | |
|
|
7991028e0a | |
|
|
c0414a563f | |
|
|
7326634cd3 | |
|
|
81f00adae3 | |
|
|
136ef314b5 | |
|
|
c13d5d7dfd | |
|
|
b6f40353ad | |
|
|
dec43ffcee | |
|
|
3dad65a53f | |
|
|
9864cf5a92 | |
|
|
1b9fcc51a1 | |
|
|
d599ca91c6 | |
|
|
5c1bb25237 | |
|
|
e5b90372a6 | |
|
|
5feb3e6815 | |
|
|
755bf1bb08 | |
|
|
0d347643ca | |
|
|
f3968db2e0 | |
|
|
90461a8cdf | |
|
|
d8d3366687 | |
|
|
90619542c8 | |
|
|
71d294ee29 | |
|
|
860d3131ae | |
|
|
d2a212fb80 | |
|
|
aaba03d001 | |
|
|
5b8b51a894 | |
|
|
e3f8a3a94b |
3
.env.dev
|
|
@ -21,6 +21,9 @@ VITE_DROP_CONSOLE=false
|
||||||
# 是否sourcemap
|
# 是否sourcemap
|
||||||
VITE_SOURCEMAP=true
|
VITE_SOURCEMAP=true
|
||||||
|
|
||||||
|
# 是否开启压缩,可以设置为 none, gzip, brotli, gzip,brotli
|
||||||
|
VITE_COMPRESS=none
|
||||||
|
|
||||||
# 打包路径
|
# 打包路径
|
||||||
VITE_BASE_PATH=/
|
VITE_BASE_PATH=/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,9 @@ VITE_DROP_CONSOLE=false
|
||||||
# 是否sourcemap
|
# 是否sourcemap
|
||||||
VITE_SOURCEMAP=false
|
VITE_SOURCEMAP=false
|
||||||
|
|
||||||
|
# 是否开启压缩,可以设置为 none, gzip, brotli, gzip,brotli
|
||||||
|
VITE_COMPRESS=none
|
||||||
|
|
||||||
# 打包路径
|
# 打包路径
|
||||||
VITE_BASE_PATH=/
|
VITE_BASE_PATH=/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,9 @@ VITE_DROP_CONSOLE=true
|
||||||
# 是否sourcemap
|
# 是否sourcemap
|
||||||
VITE_SOURCEMAP=false
|
VITE_SOURCEMAP=false
|
||||||
|
|
||||||
|
# 是否开启压缩,可以设置为 none, gzip, brotli, gzip,brotli
|
||||||
|
VITE_COMPRESS=none
|
||||||
|
|
||||||
# 打包路径
|
# 打包路径
|
||||||
VITE_BASE_PATH=/
|
VITE_BASE_PATH=/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
/build/
|
|
||||||
/config/
|
|
||||||
/dist/
|
|
||||||
/*.js
|
|
||||||
/test/unit/coverage/
|
|
||||||
/node_modules/*
|
|
||||||
/dist*
|
|
||||||
/src/main.ts
|
|
||||||
75
.eslintrc.js
|
|
@ -1,75 +0,0 @@
|
||||||
// @ts-check
|
|
||||||
const { defineConfig } = require('eslint-define-config')
|
|
||||||
module.exports = defineConfig({
|
|
||||||
root: true,
|
|
||||||
env: {
|
|
||||||
browser: true,
|
|
||||||
node: true,
|
|
||||||
es6: true
|
|
||||||
},
|
|
||||||
parser: 'vue-eslint-parser',
|
|
||||||
parserOptions: {
|
|
||||||
parser: '@typescript-eslint/parser',
|
|
||||||
ecmaVersion: 2020,
|
|
||||||
sourceType: 'module',
|
|
||||||
jsxPragma: 'React',
|
|
||||||
ecmaFeatures: {
|
|
||||||
jsx: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
extends: [
|
|
||||||
'plugin:vue/vue3-recommended',
|
|
||||||
'plugin:@typescript-eslint/recommended',
|
|
||||||
'prettier',
|
|
||||||
'plugin:prettier/recommended',
|
|
||||||
'@unocss'
|
|
||||||
],
|
|
||||||
rules: {
|
|
||||||
'vue/no-setup-props-destructure': 'off',
|
|
||||||
'vue/script-setup-uses-vars': 'error',
|
|
||||||
'vue/no-reserved-component-names': 'off',
|
|
||||||
'@typescript-eslint/ban-ts-ignore': 'off',
|
|
||||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
||||||
'@typescript-eslint/no-explicit-any': 'off',
|
|
||||||
'@typescript-eslint/no-var-requires': 'off',
|
|
||||||
'@typescript-eslint/no-empty-function': 'off',
|
|
||||||
'vue/custom-event-name-casing': 'off',
|
|
||||||
'no-use-before-define': 'off',
|
|
||||||
'@typescript-eslint/no-use-before-define': 'off',
|
|
||||||
'@typescript-eslint/ban-ts-comment': 'off',
|
|
||||||
'@typescript-eslint/ban-types': 'off',
|
|
||||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
|
||||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
||||||
'@typescript-eslint/no-unused-vars': 'off',
|
|
||||||
'no-unused-vars': 'off',
|
|
||||||
'space-before-function-paren': 'off',
|
|
||||||
|
|
||||||
'vue/attributes-order': 'off',
|
|
||||||
'vue/one-component-per-file': 'off',
|
|
||||||
'vue/html-closing-bracket-newline': 'off',
|
|
||||||
'vue/max-attributes-per-line': 'off',
|
|
||||||
'vue/multiline-html-element-content-newline': 'off',
|
|
||||||
'vue/singleline-html-element-content-newline': 'off',
|
|
||||||
'vue/attribute-hyphenation': 'off',
|
|
||||||
'vue/require-default-prop': 'off',
|
|
||||||
'vue/require-explicit-emits': 'off',
|
|
||||||
'vue/require-toggle-inside-transition': 'off',
|
|
||||||
'vue/html-self-closing': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
html: {
|
|
||||||
void: 'always',
|
|
||||||
normal: 'never',
|
|
||||||
component: 'always'
|
|
||||||
},
|
|
||||||
svg: 'always',
|
|
||||||
math: 'always'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'vue/multi-word-component-names': 'off',
|
|
||||||
'vue/no-v-html': 'off',
|
|
||||||
'prettier/prettier': 'off', // 芋艿:默认关闭 prettier 的 ESLint 校验,因为我们使用的是 IDE 的 Prettier 插件
|
|
||||||
'@unocss/order': 'off', // 芋艿:禁用 unocss 【css】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
|
||||||
'@unocss/order-attributify': 'off' // 芋艿:禁用 unocss 【属性】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
@ -7,3 +7,5 @@ pnpm-debug
|
||||||
auto-*.d.ts
|
auto-*.d.ts
|
||||||
.idea
|
.idea
|
||||||
.history
|
.history
|
||||||
|
output/
|
||||||
|
.playwright-cli/
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 169 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 216 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
|
@ -7,5 +7,6 @@
|
||||||
/src/types/env.d.ts
|
/src/types/env.d.ts
|
||||||
/src/types/auto-components.d.ts
|
/src/types/auto-components.d.ts
|
||||||
/src/types/auto-imports.d.ts
|
/src/types/auto-imports.d.ts
|
||||||
|
/src/components/Tinyflow/ui/**
|
||||||
/docs/**/*
|
/docs/**/*
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,5 @@
|
||||||
public/*
|
public/*
|
||||||
/dist*
|
/dist*
|
||||||
/src/types/env.d.ts
|
/src/types/env.d.ts
|
||||||
|
/src/components/Tinyflow/ui/**
|
||||||
/docs/**/*
|
/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",
|
"npm.packageManager": "pnpm",
|
||||||
"editor.tabSize": 2,
|
"editor.tabSize": 2,
|
||||||
"prettier.printWidth": 100, // 超过最大值换行
|
"prettier.printWidth": 100, // 超过最大值换行
|
||||||
|
|
@ -83,54 +85,75 @@
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
},
|
},
|
||||||
"editor.codeActionsOnSave": {
|
"editor.codeActionsOnSave": {
|
||||||
"source.fixAll.eslint": "explicit",
|
"source.fixAll.eslint": "explicit"
|
||||||
"source.fixAll.stylelint": "explicit"
|
|
||||||
},
|
},
|
||||||
"editor.formatOnSave": true,
|
"editor.formatOnSave": true,
|
||||||
"[vue]": {
|
"[vue]": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": "explicit",
|
||||||
|
"source.fixAll.stylelint": "explicit"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"i18n-ally.localesPaths": ["src/locales"],
|
"i18n-ally.localesPaths": ["src/locales"],
|
||||||
"i18n-ally.keystyle": "nested",
|
"i18n-ally.keystyle": "nested",
|
||||||
"i18n-ally.sortKeys": true,
|
"i18n-ally.sortKeys": true,
|
||||||
"i18n-ally.namespace": false,
|
"i18n-ally.namespace": true,
|
||||||
"i18n-ally.enabledParsers": ["ts"],
|
"i18n-ally.enabledParsers": ["ts"],
|
||||||
"i18n-ally.sourceLanguage": "en",
|
"i18n-ally.sourceLanguage": "en",
|
||||||
"i18n-ally.displayLanguage": "zh-CN",
|
"i18n-ally.displayLanguage": "zh-CN",
|
||||||
"i18n-ally.enabledFrameworks": ["vue", "react"],
|
"i18n-ally.enabledFrameworks": ["vue", "react"],
|
||||||
"cSpell.words": [
|
"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",
|
"xingyu",
|
||||||
"yudao",
|
"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,
|
"explorer.fileNesting.enabled": true,
|
||||||
|
|
@ -139,8 +162,7 @@
|
||||||
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
|
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
|
||||||
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
|
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
|
||||||
"*.env": "$(capture).env.*",
|
"*.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,
|
"terminal.integrated.scrollback": 10000
|
||||||
"nuxt.isNuxtApp": false
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
23
README.md
|
|
@ -87,7 +87,7 @@
|
||||||
|
|
||||||
* 通用模块(必选):系统功能、基础设施
|
* 通用模块(必选):系统功能、基础设施
|
||||||
* 通用模块(可选):工作流程、支付系统、数据报表、会员中心
|
* 通用模块(可选):工作流程、支付系统、数据报表、会员中心
|
||||||
* 业务系统(按需):ERP 系统、CRM 系统、MES 系统、商城系统、微信公众号、AI 大模型、IoT 物联网
|
* 业务系统(按需):Mall 电子商城、OA 办公自动化、ERP 企业资源计划系统、WMS 仓库管理系统、CRM 客户关系管理、CMS 内容管理系统、MES 执行制造系统、AI 大模型平台、IoT 物联网系统、IM 即时通讯系统、Mobile 手机移动端、Report 数据大屏
|
||||||
|
|
||||||
### 系统功能
|
### 系统功能
|
||||||
|
|
||||||
|
|
@ -238,6 +238,14 @@
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
### WMS 系统
|
||||||
|
|
||||||
|
演示地址:<https://doc.iocoder.cn/wms-preview/>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
### CRM 系统
|
### CRM 系统
|
||||||
|
|
||||||
演示地址:<https://doc.iocoder.cn/crm-preview/>
|
演示地址:<https://doc.iocoder.cn/crm-preview/>
|
||||||
|
|
@ -276,6 +284,19 @@
|
||||||
|
|
||||||

|

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

|
||||||
|
|
||||||
|
| 聊天界面 | 聊天管理 |
|
||||||
|
| --- | --- |
|
||||||
|
|  |  |
|
||||||
|
|
||||||
## 🐷 演示图
|
## 🐷 演示图
|
||||||
|
|
||||||
### 系统功能
|
### 系统功能
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,31 @@
|
||||||
import { resolve } from 'path'
|
import { resolve } from 'path'
|
||||||
import Vue from '@vitejs/plugin-vue'
|
import Vue from '@vitejs/plugin-vue'
|
||||||
import VueJsx from '@vitejs/plugin-vue-jsx'
|
import VueJsx from '@vitejs/plugin-vue-jsx'
|
||||||
import progress from 'vite-plugin-progress'
|
|
||||||
import EslintPlugin from 'vite-plugin-eslint'
|
|
||||||
import PurgeIcons from 'vite-plugin-purge-icons'
|
|
||||||
import { ViteEjsPlugin } from 'vite-plugin-ejs'
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import ElementPlus from 'unplugin-element-plus/vite'
|
import ElementPlus from 'unplugin-element-plus/vite'
|
||||||
import AutoImport from 'unplugin-auto-import/vite'
|
import AutoImport from 'unplugin-auto-import/vite'
|
||||||
import Components from 'unplugin-vue-components/vite'
|
import Components from 'unplugin-vue-components/vite'
|
||||||
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
|
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
|
||||||
import viteCompression from 'vite-plugin-compression'
|
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 { createSvgIconsPlugin } from 'vite-plugin-svg-icons-ng'
|
||||||
import UnoCSS from 'unocss/vite'
|
import UnoCSS from 'unocss/vite'
|
||||||
|
|
||||||
export function createVitePlugins() {
|
export function createVitePlugins(isBuild = false, env: Record<string, string> = {}) {
|
||||||
const root = process.cwd()
|
const root = process.cwd()
|
||||||
|
const compressTypes = (env.VITE_COMPRESS || '')
|
||||||
|
.split(',')
|
||||||
|
.map((item) => item.trim())
|
||||||
|
.filter((item) => item === 'gzip' || item === 'brotli')
|
||||||
|
|
||||||
// 路径查找
|
// 路径查找
|
||||||
function pathResolve(dir: string) {
|
function pathResolve(dir: string) {
|
||||||
return resolve(root, '.', dir)
|
return resolve(root, '.', dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
const plugins = [
|
||||||
Vue(),
|
Vue(),
|
||||||
VueJsx(),
|
VueJsx(),
|
||||||
UnoCSS(),
|
UnoCSS(),
|
||||||
progress(),
|
|
||||||
PurgeIcons(),
|
|
||||||
ElementPlus({}),
|
ElementPlus({}),
|
||||||
AutoImport({
|
AutoImport({
|
||||||
include: [
|
include: [
|
||||||
|
|
@ -51,7 +47,7 @@ export function createVitePlugins() {
|
||||||
'@/utils/dict': ['DICT_TYPE']
|
'@/utils/dict': ['DICT_TYPE']
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
dts: 'src/types/auto-imports.d.ts',
|
dts: !isBuild && 'src/types/auto-imports.d.ts',
|
||||||
resolvers: [ElementPlusResolver()],
|
resolvers: [ElementPlusResolver()],
|
||||||
eslintrc: {
|
eslintrc: {
|
||||||
enabled: false, // Default `false`
|
enabled: false, // Default `false`
|
||||||
|
|
@ -61,25 +57,16 @@ export function createVitePlugins() {
|
||||||
}),
|
}),
|
||||||
Components({
|
Components({
|
||||||
// 生成自定义 `auto-components.d.ts` 全局声明
|
// 生成自定义 `auto-components.d.ts` 全局声明
|
||||||
dts: 'src/types/auto-components.d.ts',
|
dts: !isBuild && 'src/types/auto-components.d.ts',
|
||||||
// 自定义组件的解析器
|
// 自定义组件的解析器
|
||||||
resolvers: [ElementPlusResolver()],
|
resolvers: [ElementPlusResolver()],
|
||||||
globs: ["src/components/**/**.{vue, md}", '!src/components/DiyEditor/components/mobile/**']
|
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({
|
createSvgIconsPlugin({
|
||||||
iconDirs: [pathResolve('src/assets/svgs')],
|
iconDirs: [pathResolve('src/assets/svgs')],
|
||||||
symbolId: 'icon-[dir]-[name]',
|
symbolId: 'icon-[dir]-[name]'
|
||||||
}),
|
}),
|
||||||
viteCompression({
|
isBuild && compressTypes.includes('gzip') && viteCompression({
|
||||||
verbose: true, // 是否在控制台输出压缩结果
|
verbose: true, // 是否在控制台输出压缩结果
|
||||||
disable: false, // 是否禁用
|
disable: false, // 是否禁用
|
||||||
threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
|
threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
|
||||||
|
|
@ -87,13 +74,15 @@ export function createVitePlugins() {
|
||||||
ext: '.gz', // 生成的压缩包后缀
|
ext: '.gz', // 生成的压缩包后缀
|
||||||
deleteOriginFile: false //压缩后是否删除源文件
|
deleteOriginFile: false //压缩后是否删除源文件
|
||||||
}),
|
}),
|
||||||
ViteEjsPlugin(),
|
isBuild && compressTypes.includes('brotli') && viteCompression({
|
||||||
topLevelAwait({
|
verbose: true,
|
||||||
// https://juejin.cn/post/7152191742513512485
|
disable: false,
|
||||||
// The export name of top-level await promise for each chunk module
|
threshold: 10240,
|
||||||
promiseExportName: '__tla',
|
algorithm: 'brotliCompress',
|
||||||
// The function to generate import names of top-level await promise in each chunk module
|
ext: '.br',
|
||||||
promiseImportName: (i) => `__tla_${i}`
|
deleteOriginFile: false
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
|
|
||||||
|
return plugins.filter(Boolean)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,22 +2,18 @@ const include = [
|
||||||
'qs',
|
'qs',
|
||||||
'url',
|
'url',
|
||||||
'vue',
|
'vue',
|
||||||
'sass',
|
|
||||||
'mitt',
|
'mitt',
|
||||||
'axios',
|
'axios',
|
||||||
'pinia',
|
'pinia',
|
||||||
'dayjs',
|
'dayjs',
|
||||||
'qrcode',
|
'qrcode',
|
||||||
'unocss',
|
|
||||||
'vue-router',
|
'vue-router',
|
||||||
'vue-types',
|
'vue-types',
|
||||||
'vue-i18n',
|
|
||||||
'crypto-js',
|
'crypto-js',
|
||||||
'cropperjs',
|
'cropperjs',
|
||||||
'lodash-es',
|
'lodash-es',
|
||||||
'nprogress',
|
'nprogress',
|
||||||
'web-storage-cache',
|
'web-storage-cache',
|
||||||
'@iconify/iconify',
|
|
||||||
'@vueuse/core',
|
'@vueuse/core',
|
||||||
'@zxcvbn-ts/core',
|
'@zxcvbn-ts/core',
|
||||||
'echarts/core',
|
'echarts/core',
|
||||||
|
|
@ -91,18 +87,9 @@ const include = [
|
||||||
'element-plus/es/components/dropdown-menu/style/css',
|
'element-plus/es/components/dropdown-menu/style/css',
|
||||||
'element-plus/es/components/dropdown-item/style/css',
|
'element-plus/es/components/dropdown-item/style/css',
|
||||||
'element-plus/es/components/skeleton/style/css',
|
'element-plus/es/components/skeleton/style/css',
|
||||||
'element-plus/es/components/skeleton/style/css',
|
'element-plus/es/components/skeleton-item/style/css',
|
||||||
'element-plus/es/components/backtop/style/css',
|
|
||||||
'element-plus/es/components/menu/style/css',
|
|
||||||
'element-plus/es/components/sub-menu/style/css',
|
|
||||||
'element-plus/es/components/menu-item/style/css',
|
|
||||||
'element-plus/es/components/dropdown/style/css',
|
|
||||||
'element-plus/es/components/tree/style/css',
|
'element-plus/es/components/tree/style/css',
|
||||||
'element-plus/es/components/dropdown-menu/style/css',
|
|
||||||
'element-plus/es/components/dropdown-item/style/css',
|
|
||||||
'element-plus/es/components/badge/style/css',
|
'element-plus/es/components/badge/style/css',
|
||||||
'element-plus/es/components/breadcrumb/style/css',
|
|
||||||
'element-plus/es/components/breadcrumb-item/style/css',
|
|
||||||
'element-plus/es/components/image/style/css',
|
'element-plus/es/components/image/style/css',
|
||||||
'element-plus/es/components/collapse-transition/style/css',
|
'element-plus/es/components/collapse-transition/style/css',
|
||||||
'element-plus/es/components/timeline/style/css',
|
'element-plus/es/components/timeline/style/css',
|
||||||
|
|
@ -119,6 +106,6 @@ const include = [
|
||||||
'element-plus/es/components/progress/style/css'
|
'element-plus/es/components/progress/style/css'
|
||||||
]
|
]
|
||||||
|
|
||||||
const exclude = ['@iconify/json']
|
const exclude: string[] = []
|
||||||
|
|
||||||
export { include, exclude }
|
export { include, exclude }
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,117 @@
|
||||||
|
import pluginVue from 'eslint-plugin-vue'
|
||||||
|
import tseslint from 'typescript-eslint'
|
||||||
|
import unocss from '@unocss/eslint-config/flat'
|
||||||
|
import autoImportGlobals from './.eslintrc-auto-import.json' with { type: 'json' }
|
||||||
|
|
||||||
|
export default tseslint.config(
|
||||||
|
// Global ignores (replaces .eslintignore)
|
||||||
|
{
|
||||||
|
ignores: [
|
||||||
|
'build/',
|
||||||
|
'config/',
|
||||||
|
'dist/',
|
||||||
|
'dist*/',
|
||||||
|
'*.js',
|
||||||
|
'*.mjs',
|
||||||
|
'!eslint.config.mjs',
|
||||||
|
'test/unit/coverage/',
|
||||||
|
'node_modules/',
|
||||||
|
'src/main.ts',
|
||||||
|
'src/types/auto-components.d.ts',
|
||||||
|
'src/components/Tinyflow/ui/**'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Base TypeScript config
|
||||||
|
...tseslint.configs.recommended,
|
||||||
|
|
||||||
|
// Vue recommended config
|
||||||
|
...pluginVue.configs['flat/recommended'],
|
||||||
|
|
||||||
|
// UnoCSS config
|
||||||
|
unocss,
|
||||||
|
|
||||||
|
// Vue files use vue-eslint-parser with TypeScript parser
|
||||||
|
{
|
||||||
|
files: ['**/*.vue'],
|
||||||
|
languageOptions: {
|
||||||
|
parserOptions: {
|
||||||
|
parser: tseslint.parser
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Main rules config
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
ecmaVersion: 2020,
|
||||||
|
sourceType: 'module',
|
||||||
|
globals: {
|
||||||
|
...autoImportGlobals.globals
|
||||||
|
},
|
||||||
|
parserOptions: {
|
||||||
|
ecmaFeatures: {
|
||||||
|
jsx: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
// Vue rules
|
||||||
|
'vue/no-reserved-component-names': 'off',
|
||||||
|
'vue/custom-event-name-casing': 'off',
|
||||||
|
'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',
|
||||||
|
'vue/attribute-hyphenation': 'off',
|
||||||
|
'vue/require-default-prop': 'off',
|
||||||
|
'vue/require-explicit-emits': 'off',
|
||||||
|
'vue/require-toggle-inside-transition': 'off',
|
||||||
|
'vue/html-self-closing': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
html: {
|
||||||
|
void: 'always',
|
||||||
|
normal: 'never',
|
||||||
|
component: 'always'
|
||||||
|
},
|
||||||
|
svg: 'always',
|
||||||
|
math: 'always'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'vue/multi-word-component-names': 'off',
|
||||||
|
'vue/no-v-html': 'off',
|
||||||
|
|
||||||
|
// TypeScript rules
|
||||||
|
'@typescript-eslint/ban-ts-comment': 'off',
|
||||||
|
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||||
|
'@typescript-eslint/no-explicit-any': 'off',
|
||||||
|
'@typescript-eslint/no-empty-function': 'off',
|
||||||
|
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||||
|
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||||
|
'@typescript-eslint/no-unused-vars': 'off',
|
||||||
|
'@typescript-eslint/no-require-imports': 'off',
|
||||||
|
'@typescript-eslint/no-unused-expressions': 'off',
|
||||||
|
'@typescript-eslint/no-unsafe-function-type': 'off',
|
||||||
|
'@typescript-eslint/no-wrapper-object-types': 'off',
|
||||||
|
'@typescript-eslint/no-this-alias': 'off',
|
||||||
|
'@typescript-eslint/no-empty-object-type': 'off',
|
||||||
|
'vue/no-ref-as-operand': 'off',
|
||||||
|
'vue/no-mutating-props': 'off',
|
||||||
|
'vue/no-side-effects-in-computed-properties': 'off',
|
||||||
|
'no-use-before-define': 'off',
|
||||||
|
'@typescript-eslint/no-use-before-define': 'off',
|
||||||
|
'no-unused-vars': 'off',
|
||||||
|
'space-before-function-paren': 'off',
|
||||||
|
|
||||||
|
// UnoCSS rules - 芋艿:禁用 unocss 顺序提示
|
||||||
|
'@unocss/order': 'off',
|
||||||
|
'@unocss/order-attributify': 'off',
|
||||||
|
'unocss/order': 'off',
|
||||||
|
'unocss/order-attributify': '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'
|
||||||
|
]
|
||||||
|
}
|
||||||
198
package.json
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "yudao-ui-admin-vue3",
|
"name": "yudao-ui-admin-vue3",
|
||||||
"version": "2026.04-snapshot",
|
"version": "2026.05-snapshot",
|
||||||
"description": "基于vue3、vite4、element-plus、typesScript",
|
"description": "基于vue3、vite4、element-plus、typesScript",
|
||||||
"author": "xingyu",
|
"author": "xingyu",
|
||||||
"private": false,
|
"private": false,
|
||||||
|
|
@ -8,144 +8,134 @@
|
||||||
"i": "pnpm install",
|
"i": "pnpm install",
|
||||||
"dev": "vite --mode env.local",
|
"dev": "vite --mode env.local",
|
||||||
"dev-server": "vite --mode dev",
|
"dev-server": "vite --mode dev",
|
||||||
"ts:check": "vue-tsc --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": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode env.local",
|
"build:local": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode env.local",
|
||||||
"build:dev": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode dev",
|
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
|
||||||
"build:test": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode test",
|
"build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test",
|
||||||
"build:stage": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode stage",
|
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage",
|
||||||
"build:prod": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode prod",
|
"build:prod": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode prod",
|
||||||
"serve:dev": "vite preview --mode dev",
|
"serve:dev": "vite preview --mode dev",
|
||||||
"serve:prod": "vite preview --mode prod",
|
"serve:prod": "vite preview --mode prod",
|
||||||
"preview": "pnpm build:local && vite preview",
|
"preview": "pnpm build:local && vite preview",
|
||||||
"clean": "npx rimraf node_modules",
|
"clean": "npx rimraf node_modules",
|
||||||
"clean:cache": "npx rimraf node_modules/.cache",
|
"clean:cache": "npx rimraf node_modules/.cache",
|
||||||
"lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
|
"lint": "pnpm lint:eslint:check && pnpm lint:style:check && pnpm lint:format:check",
|
||||||
"lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
|
"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: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": {
|
"dependencies": {
|
||||||
"@element-plus/icons-vue": "2.3.2",
|
"@element-plus/icons-vue": "2.3.2",
|
||||||
"@form-create/designer": "^3.2.6",
|
"@form-create/designer": "^3.4.0",
|
||||||
"@form-create/element-ui": "^3.2.11",
|
"@form-create/element-ui": "^3.2.38",
|
||||||
"@iconify/iconify": "^3.1.1",
|
"@iconify/vue": "^5.0.1",
|
||||||
"@microsoft/fetch-event-source": "^2.0.1",
|
"@microsoft/fetch-event-source": "^2.0.1",
|
||||||
"@videojs-player/vue": "^1.0.0",
|
"@videojs-player/vue": "^1.0.0",
|
||||||
"@vueuse/core": "^10.9.0",
|
"@vueuse/core": "^14.3.0",
|
||||||
"@wangeditor-next/editor": "^5.6.46",
|
"@wangeditor-next/editor": "^5.7.0",
|
||||||
"@wangeditor-next/editor-for-vue": "^5.1.14",
|
"@wangeditor-next/editor-for-vue": "^5.1.14",
|
||||||
"@wangeditor-next/plugin-mention": "^1.0.16",
|
"@wangeditor-next/plugin-mention": "^2.0.0",
|
||||||
"@zxcvbn-ts/core": "^3.0.4",
|
"@zxcvbn-ts/core": "^3.0.4",
|
||||||
"animate.css": "^4.1.1",
|
"animate.css": "^4.1.1",
|
||||||
"axios": "1.9.0",
|
"axios": "1.16.0",
|
||||||
"benz-amr-recorder": "^1.1.5",
|
"benz-amr-recorder": "^1.1.5",
|
||||||
"bpmn-js-token-simulation": "^0.36.0",
|
"bpmn-js-token-simulation": "^0.39.3",
|
||||||
"camunda-bpmn-moddle": "^7.0.1",
|
"camunda-bpmn-moddle": "^7.0.1",
|
||||||
"cropperjs": "^1.6.1",
|
"cropperjs": "^2.1.1",
|
||||||
"crypto-js": "^4.2.0",
|
"crypto-js": "^4.2.0",
|
||||||
"dayjs": "^1.11.10",
|
"dayjs": "^1.11.20",
|
||||||
"dayjs-plugin-lunar": "^1.4.1",
|
|
||||||
"dhtmlx-gantt": "^9.1.1",
|
"dhtmlx-gantt": "^9.1.1",
|
||||||
"diagram-js": "^12.8.0",
|
"diagram-js": "^15.14.0",
|
||||||
"driver.js": "^1.3.1",
|
"driver.js": "^1.4.0",
|
||||||
"echarts": "^5.5.0",
|
"echarts": "^6.0.0",
|
||||||
"echarts-wordcloud": "^2.1.0",
|
"echarts-wordcloud": "^2.1.0",
|
||||||
"element-plus": "2.11.1",
|
"element-plus": "2.13.7",
|
||||||
"fast-xml-parser": "^4.3.2",
|
"fast-xml-parser": "^4.3.2",
|
||||||
"highlight.js": "^11.9.0",
|
"highlight.js": "^11.11.1",
|
||||||
"jsbarcode": "^3.12.3",
|
"jsbarcode": "^3.12.3",
|
||||||
"jsencrypt": "^3.3.2",
|
"jsencrypt": "^3.5.4",
|
||||||
"jsoneditor": "^10.1.3",
|
"jsoneditor": "^10.4.3",
|
||||||
"lodash-es": "^4.17.21",
|
"livekit-client": "^2.18.9",
|
||||||
"markdown-it": "^14.1.0",
|
"lodash-es": "^4.18.1",
|
||||||
"markmap-common": "^0.16.0",
|
"markdown-it": "^14.1.1",
|
||||||
"markmap-lib": "^0.16.1",
|
"markmap-common": "^0.18.9",
|
||||||
"markmap-toolbar": "^0.17.0",
|
"markmap-lib": "^0.18.12",
|
||||||
"markmap-view": "^0.16.0",
|
"markmap-toolbar": "^0.18.12",
|
||||||
"min-dash": "^4.1.1",
|
"markmap-view": "^0.18.12",
|
||||||
|
"min-dash": "^5.0.0",
|
||||||
"mitt": "^3.0.1",
|
"mitt": "^3.0.1",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"pinia": "^2.1.7",
|
"pinia": "^3.0.4",
|
||||||
"pinia-plugin-persistedstate": "^3.2.1",
|
"pinia-plugin-persistedstate": "^4.7.1",
|
||||||
"qrcode": "^1.5.3",
|
"qrcode": "^1.5.4",
|
||||||
"qs": "^6.12.0",
|
"qs": "^6.15.1",
|
||||||
"snabbdom": "^3.6.2",
|
"snabbdom": "^3.6.3",
|
||||||
"sortablejs": "^1.15.3",
|
"sortablejs": "^1.15.7",
|
||||||
"steady-xml": "^0.1.0",
|
"steady-xml": "^0.1.0",
|
||||||
"tyme4ts": "^1.4.6",
|
"tyme4ts": "^1.4.6",
|
||||||
"url": "^0.11.3",
|
"url": "^0.11.4",
|
||||||
"video.js": "^7.21.5",
|
"video.js": "^8.23.8",
|
||||||
"vue": "3.5.12",
|
"vue": "3.5.34",
|
||||||
"vue-dompurify-html": "^4.1.4",
|
"vue-dompurify-html": "^5.3.0",
|
||||||
"vue-i18n": "9.10.2",
|
"vue-i18n": "11.4.0",
|
||||||
"vue-router": "4.4.5",
|
"vue-router": "5.0.6",
|
||||||
"vue-types": "^5.1.1",
|
"vue-types": "^6.0.0",
|
||||||
"vue3-print-nb": "^0.1.4",
|
"vue3-print-nb": "^0.1.4",
|
||||||
"vue3-signature": "^0.2.4",
|
"vue3-signature": "^0.4.4",
|
||||||
"vuedraggable": "^4.1.0",
|
"vuedraggable": "^4.1.0",
|
||||||
"web-storage-cache": "^1.1.1",
|
"web-storage-cache": "^1.1.1",
|
||||||
"xml-js": "^1.6.11"
|
"xml-js": "^1.6.11"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "^19.0.1",
|
"@commitlint/cli": "^20.5.3",
|
||||||
"@commitlint/config-conventional": "^19.0.0",
|
"@commitlint/config-conventional": "^20.5.3",
|
||||||
"@iconify/json": "^2.2.187",
|
"@iconify/json": "^2.2.470",
|
||||||
"@intlify/unplugin-vue-i18n": "^2.0.0",
|
"@types/jsoneditor": "^9.9.6",
|
||||||
"@purge-icons/generated": "^0.9.0",
|
|
||||||
"@types/jsoneditor": "^9.9.5",
|
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/node": "^20.11.21",
|
"@types/node": "^25.6.0",
|
||||||
"@types/nprogress": "^0.2.3",
|
"@types/nprogress": "^0.2.3",
|
||||||
"@types/qrcode": "^1.5.5",
|
"@types/qrcode": "^1.5.6",
|
||||||
"@types/qs": "^6.9.12",
|
"@types/qs": "^6.15.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.1.0",
|
"@unocss/eslint-config": "^66.6.8",
|
||||||
"@typescript-eslint/parser": "^7.1.0",
|
"@unocss/eslint-plugin": "66.6.8",
|
||||||
"@unocss/eslint-config": "^0.57.4",
|
"@unocss/transformer-variant-group": "^66.6.8",
|
||||||
"@unocss/eslint-plugin": "66.1.0-beta.5",
|
"@vitejs/plugin-vue": "^6.0.6",
|
||||||
"@unocss/transformer-variant-group": "^0.58.5",
|
"@vitejs/plugin-vue-jsx": "^5.1.5",
|
||||||
"@vitejs/plugin-legacy": "^5.3.1",
|
"autoprefixer": "^10.5.0",
|
||||||
"@vitejs/plugin-vue": "^5.0.4",
|
"bpmn-js": "^18.16.1",
|
||||||
"@vitejs/plugin-vue-jsx": "^3.1.0",
|
"bpmn-js-properties-panel": "5.54.0",
|
||||||
"autoprefixer": "^10.4.17",
|
"consola": "^3.4.2",
|
||||||
"bpmn-js": "^17.9.2",
|
"eslint": "^10.3.0",
|
||||||
"bpmn-js-properties-panel": "5.23.0",
|
"eslint-plugin-vue": "^10.9.1",
|
||||||
"consola": "^3.2.3",
|
"lint-staged": "^16.4.0",
|
||||||
"cross-env": "^7.0.3",
|
"postcss": "^8.5.14",
|
||||||
"eslint": "^8.57.0",
|
"postcss-html": "^1.8.1",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
|
||||||
"eslint-define-config": "^2.1.0",
|
|
||||||
"eslint-plugin-prettier": "^5.1.3",
|
|
||||||
"eslint-plugin-vue": "^9.22.0",
|
|
||||||
"lint-staged": "^15.2.2",
|
|
||||||
"postcss": "^8.4.35",
|
|
||||||
"postcss-html": "^1.6.0",
|
|
||||||
"postcss-scss": "^4.0.9",
|
"postcss-scss": "^4.0.9",
|
||||||
"prettier": "^3.2.5",
|
"prettier": "^3.8.3",
|
||||||
"prettier-eslint": "^16.3.0",
|
"prettier-eslint": "^16.4.2",
|
||||||
"rimraf": "^5.0.5",
|
"rimraf": "^6.1.3",
|
||||||
"rollup": "^4.12.0",
|
"rollup": "^4.60.3",
|
||||||
"sass": "^1.69.5",
|
"sass": "^1.99.0",
|
||||||
"stylelint": "^16.2.1",
|
"stylelint": "^17.11.0",
|
||||||
"stylelint-config-html": "^1.1.0",
|
"stylelint-config-html": "^1.1.0",
|
||||||
"stylelint-config-recommended": "^14.0.0",
|
"stylelint-config-recommended": "^18.0.0",
|
||||||
"stylelint-config-standard": "^36.0.0",
|
"stylelint-config-standard": "^40.0.0",
|
||||||
"stylelint-order": "^6.0.4",
|
"stylelint-order": "^8.1.1",
|
||||||
"terser": "^5.28.1",
|
"typescript": "6.0.3",
|
||||||
"typescript": "5.3.3",
|
"typescript-eslint": "^8.59.2",
|
||||||
"unocss": "^0.58.5",
|
"unocss": "^66.6.8",
|
||||||
"unplugin-auto-import": "^0.16.7",
|
"unplugin-auto-import": "^21.0.0",
|
||||||
"unplugin-element-plus": "^0.8.0",
|
"unplugin-element-plus": "^0.11.2",
|
||||||
"unplugin-vue-components": "^0.25.2",
|
"unplugin-vue-components": "^32.0.0",
|
||||||
"vite": "5.1.4",
|
"vite": "8.0.10",
|
||||||
"vite-plugin-compression": "^0.5.1",
|
"vite-plugin-compression": "^0.5.1",
|
||||||
"vite-plugin-ejs": "^1.7.0",
|
"vite-plugin-svg-icons-ng": "^1.9.0",
|
||||||
"vite-plugin-eslint": "^1.8.1",
|
"vue-eslint-parser": "^10.4.0",
|
||||||
"vite-plugin-progress": "^0.0.7",
|
"vue-tsc": "^3.2.8"
|
||||||
"vite-plugin-purge-icons": "^0.10.0",
|
|
||||||
"vite-plugin-svg-icons-ng": "^1.3.1",
|
|
||||||
"vite-plugin-top-level-await": "^1.4.4",
|
|
||||||
"vue-eslint-parser": "^9.3.2",
|
|
||||||
"vue-tsc": "^1.8.27"
|
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
@ -158,7 +148,7 @@
|
||||||
"homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3",
|
"homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3",
|
||||||
"web-types": "./web-types.json",
|
"web-types": "./web-types.json",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 16.0.0",
|
"node": ">= 20.19.0",
|
||||||
"pnpm": ">=8.6.0"
|
"pnpm": ">=8.6.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
10907
pnpm-lock.yaml
|
|
@ -12,7 +12,7 @@ export interface ChatConversationVO {
|
||||||
temperature: number // 温度参数
|
temperature: number // 温度参数
|
||||||
maxTokens: number // 单条回复的最大 Token 数量
|
maxTokens: number // 单条回复的最大 Token 数量
|
||||||
maxContexts: number // 上下文的最大 Message 数量
|
maxContexts: number // 上下文的最大 Message 数量
|
||||||
createTime?: Date // 创建时间
|
createTime: Date // 创建时间
|
||||||
// 额外字段
|
// 额外字段
|
||||||
systemMessage?: string // 角色设定
|
systemMessage?: string // 角色设定
|
||||||
modelName?: 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}` })
|
return await request.delete({ url: `/ai/chat/conversation/delete-my?id=${id}` })
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,15 +23,15 @@ export interface ImageDrawReqVO {
|
||||||
prompt: string // 提示词
|
prompt: string // 提示词
|
||||||
modelId: number // 模型
|
modelId: number // 模型
|
||||||
style: string // 图像生成的风格
|
style: string // 图像生成的风格
|
||||||
width: string // 图片宽度
|
width: number // 图片宽度
|
||||||
height: string // 图片高度
|
height: number // 图片高度
|
||||||
options: object // 绘制参数,Map<String, String>
|
options: object // 绘制参数,Map<String, String>
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ImageMidjourneyImagineReqVO {
|
export interface ImageMidjourneyImagineReqVO {
|
||||||
prompt: string // 提示词
|
prompt: string // 提示词
|
||||||
modelId: number // 模型
|
modelId: number // 模型
|
||||||
base64Array: string[] // size不能为空
|
base64Array: string[] // 参考图 base64 列表
|
||||||
width: string // 图片宽度
|
width: string // 图片宽度
|
||||||
height: string // 图片高度
|
height: string // 图片高度
|
||||||
version: string // 版本
|
version: string // 版本
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ export type ApprovalTaskInfo = {
|
||||||
assigneeUser: User
|
assigneeUser: User
|
||||||
status: number
|
status: number
|
||||||
reason: string
|
reason: string
|
||||||
|
attachments?: string[]
|
||||||
signPicUrl: string
|
signPicUrl: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
|
||||||
export const updateBpmSimpleModel = async (data) => {
|
export const updateBpmSimpleModel = async (data) => {
|
||||||
return await request.post({
|
return await request.post({
|
||||||
url: '/bpm/model/simple/update',
|
url: '/bpm/model/simple/update',
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,18 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface BusinessStatusTypeVO {
|
export interface BusinessStatusTypeVO {
|
||||||
id: number
|
id?: number
|
||||||
name: string
|
name: string
|
||||||
deptIds: number[]
|
deptIds: number[]
|
||||||
statuses?: {
|
statuses: BusinessStatusVO[]
|
||||||
id: number
|
|
||||||
name: string
|
|
||||||
percent: number
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface BusinessStatusVO {
|
||||||
|
id?: number
|
||||||
|
name: string
|
||||||
|
percent?: number
|
||||||
|
endStatus?: number
|
||||||
|
key?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DEFAULT_STATUSES = [
|
export const DEFAULT_STATUSES = [
|
||||||
|
|
@ -30,7 +34,7 @@ export const DEFAULT_STATUSES = [
|
||||||
name: '无效',
|
name: '无效',
|
||||||
percent: 0
|
percent: 0
|
||||||
}
|
}
|
||||||
]
|
] satisfies BusinessStatusVO[]
|
||||||
|
|
||||||
// 查询商机状态组列表
|
// 查询商机状态组列表
|
||||||
export const getBusinessStatusPage = async (params: any) => {
|
export const getBusinessStatusPage = async (params: any) => {
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@ export interface FinancePaymentVO {
|
||||||
remark: string // 备注
|
remark: string // 备注
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ERP 付款单项 VO
|
||||||
|
export interface FinancePaymentItemVO {
|
||||||
|
paymentPrice: number // 本次付款金额,单位:元
|
||||||
|
}
|
||||||
|
|
||||||
// ERP 付款单 API
|
// ERP 付款单 API
|
||||||
export const FinancePaymentApi = {
|
export const FinancePaymentApi = {
|
||||||
// 查询付款单分页
|
// 查询付款单分页
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@ export interface FinanceReceiptVO {
|
||||||
remark: string // 备注
|
remark: string // 备注
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ERP 收款单项 VO
|
||||||
|
export interface FinanceReceiptItemVO {
|
||||||
|
receiptPrice: number // 本次收款金额,单位:元
|
||||||
|
}
|
||||||
|
|
||||||
// ERP 收款单 API
|
// ERP 收款单 API
|
||||||
export const FinanceReceiptApi = {
|
export const FinanceReceiptApi = {
|
||||||
// 查询收款单分页
|
// 查询收款单分页
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@ export interface ProductCategoryVO {
|
||||||
// ERP 产品分类 API
|
// ERP 产品分类 API
|
||||||
export const ProductCategoryApi = {
|
export const ProductCategoryApi = {
|
||||||
// 查询产品分类列表
|
// 查询产品分类列表
|
||||||
getProductCategoryList: async () => {
|
getProductCategoryList: async (params?: any) => {
|
||||||
return await request.get({ url: `/erp/product-category/list` })
|
return await request.get({ url: `/erp/product-category/list`, params })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询产品分类精简列表
|
// 查询产品分类精简列表
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,45 @@ import request from '@/config/axios'
|
||||||
|
|
||||||
// ERP 采购订单 VO
|
// ERP 采购订单 VO
|
||||||
export interface PurchaseOrderVO {
|
export interface PurchaseOrderVO {
|
||||||
id: number // 订单工单编号
|
id?: number // 订单工单编号
|
||||||
no: string // 采购订单号
|
no?: string // 采购订单号
|
||||||
customerId: number // 客户编号
|
supplierId?: number // 供应商编号
|
||||||
orderTime: Date // 订单时间
|
accountId?: number // 结算账户编号
|
||||||
totalCount: number // 合计数量
|
orderTime?: Date // 订单时间
|
||||||
|
totalCount?: number // 合计数量
|
||||||
|
totalProductPrice?: number // 合计产品金额,单位:元
|
||||||
|
discountPercent?: number // 优惠率
|
||||||
|
discountPrice?: number // 优惠金额,单位:元
|
||||||
totalPrice: number // 合计金额,单位:元
|
totalPrice: number // 合计金额,单位:元
|
||||||
status: number // 状态
|
depositPrice?: number // 订金金额,单位:元
|
||||||
remark: string // 备注
|
status?: number // 状态
|
||||||
outCount: number // 采购出库数量
|
remark?: string // 备注
|
||||||
returnCount: number // 采购退货数量
|
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
|
// ERP 采购订单 API
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,46 @@ import request from '@/config/axios'
|
||||||
|
|
||||||
// ERP 销售订单 VO
|
// ERP 销售订单 VO
|
||||||
export interface SaleOrderVO {
|
export interface SaleOrderVO {
|
||||||
id: number // 订单工单编号
|
id?: number // 订单工单编号
|
||||||
no: string // 销售订单号
|
no?: string // 销售订单号
|
||||||
customerId: number // 客户编号
|
customerId?: number // 客户编号
|
||||||
orderTime: Date // 订单时间
|
accountId?: number // 结算账户编号
|
||||||
totalCount: number // 合计数量
|
saleUserId?: number // 销售人员编号
|
||||||
|
orderTime?: Date // 订单时间
|
||||||
|
totalCount?: number // 合计数量
|
||||||
|
totalProductPrice?: number // 合计产品金额,单位:元
|
||||||
|
discountPercent?: number // 优惠率
|
||||||
|
discountPrice?: number // 优惠金额,单位:元
|
||||||
totalPrice: number // 合计金额,单位:元
|
totalPrice: number // 合计金额,单位:元
|
||||||
status: number // 状态
|
depositPrice?: number // 订金金额,单位:元
|
||||||
remark: string // 备注
|
status?: number // 状态
|
||||||
outCount: number // 销售出库数量
|
remark?: string // 备注
|
||||||
returnCount: number // 销售退货数量
|
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
|
// 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
|
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 = {
|
export type CodegenColumnVO = {
|
||||||
id: number
|
id: number
|
||||||
tableId: number
|
tableId: number
|
||||||
|
|
@ -52,7 +91,7 @@ export type CodegenPreviewVO = {
|
||||||
}
|
}
|
||||||
|
|
||||||
export type CodegenUpdateReqVO = {
|
export type CodegenUpdateReqVO = {
|
||||||
table: CodegenTableVO | any
|
table: CodegenTableSaveReqVO
|
||||||
columns: CodegenColumnVO[]
|
columns: CodegenColumnVO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -68,7 +107,7 @@ export const getCodegenTablePage = (params: PageParam) => {
|
||||||
|
|
||||||
// 查询详情代码生成表定义
|
// 查询详情代码生成表定义
|
||||||
export const getCodegenTable = (id: number) => {
|
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[]) => {
|
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 () => {
|
export const getDemo02CategoryList = async (params?: any) => {
|
||||||
return await request.get({ url: `/infra/demo02-category/list` })
|
return await request.get({ url: `/infra/demo02-category/list`, params })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询示例分类详情
|
// 查询示例分类详情
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,28 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number // 学生编号
|
||||||
name?: string; // 名字
|
name?: string // 名字
|
||||||
score?: number; // 分数
|
score?: number // 分数
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number // 学生编号
|
||||||
name?: string; // 名字
|
name?: string // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string // 班主任
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number // 编号
|
||||||
name?: string; // 名字
|
name?: string // 名字
|
||||||
sex?: number; // 性别
|
sex?: number // 性别
|
||||||
birthday?: string | Dayjs; // 出生日期
|
birthday?: string | number // 出生日期
|
||||||
description?: string; // 简介
|
description?: string // 简介
|
||||||
}
|
}
|
||||||
|
|
||||||
// 学生 API
|
// 学生 API
|
||||||
|
|
@ -55,7 +54,9 @@ export const Demo03StudentApi = {
|
||||||
|
|
||||||
/** 批量删除学生 */
|
/** 批量删除学生 */
|
||||||
deleteDemo03StudentList: async (ids: number[]) => {
|
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
|
// 导出学生 Excel
|
||||||
|
|
@ -86,7 +87,9 @@ export const Demo03StudentApi = {
|
||||||
|
|
||||||
/** 批量删除学生课程 */
|
/** 批量删除学生课程 */
|
||||||
deleteDemo03CourseList: async (ids: number[]) => {
|
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(',')}`
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获得学生课程
|
// 获得学生课程
|
||||||
|
|
@ -117,11 +120,13 @@ export const Demo03StudentApi = {
|
||||||
|
|
||||||
/** 批量删除学生班级 */
|
/** 批量删除学生班级 */
|
||||||
deleteDemo03GradeList: async (ids: number[]) => {
|
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) => {
|
getDemo03Grade: async (id: number) => {
|
||||||
return await request.get({ url: `/infra/demo03-student-erp/demo03-grade/get?id=` + id })
|
return await request.get({ url: `/infra/demo03-student-erp/demo03-grade/get?id=` + id })
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,28 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number // 学生编号
|
||||||
name?: string; // 名字
|
name?: string // 名字
|
||||||
score?: number; // 分数
|
score?: number // 分数
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number // 学生编号
|
||||||
name?: string; // 名字
|
name?: string // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string // 班主任
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number // 编号
|
||||||
name?: string; // 名字
|
name?: string // 名字
|
||||||
sex?: number; // 性别
|
sex?: number // 性别
|
||||||
birthday?: string | Dayjs; // 出生日期
|
birthday?: string | number // 出生日期
|
||||||
description?: string; // 简介
|
description?: string // 简介
|
||||||
demo03courses?: Demo03Course[]
|
demo03courses?: Demo03Course[]
|
||||||
demo03grade?: Demo03Grade
|
demo03grade?: Demo03Grade
|
||||||
}
|
}
|
||||||
|
|
@ -57,7 +56,9 @@ export const Demo03StudentApi = {
|
||||||
|
|
||||||
/** 批量删除学生 */
|
/** 批量删除学生 */
|
||||||
deleteDemo03StudentList: async (ids: number[]) => {
|
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
|
// 导出学生 Excel
|
||||||
|
|
@ -69,13 +70,17 @@ export const Demo03StudentApi = {
|
||||||
|
|
||||||
// 获得学生课程列表
|
// 获得学生课程列表
|
||||||
getDemo03CourseListByStudentId: async (studentId) => {
|
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) => {
|
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 request from '@/config/axios'
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number // 学生编号
|
||||||
name?: string; // 名字
|
name?: string // 名字
|
||||||
score?: number; // 分数
|
score?: number // 分数
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number // 学生编号
|
||||||
name?: string; // 名字
|
name?: string // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string // 班主任
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number // 编号
|
||||||
name?: string; // 名字
|
name?: string // 名字
|
||||||
sex?: number; // 性别
|
sex?: number // 性别
|
||||||
birthday?: string | Dayjs; // 出生日期
|
birthday?: string | number // 出生日期
|
||||||
description?: string; // 简介
|
description?: string // 简介
|
||||||
demo03courses?: Demo03Course[]
|
demo03courses?: Demo03Course[]
|
||||||
demo03grade?: Demo03Grade
|
demo03grade?: Demo03Grade
|
||||||
}
|
}
|
||||||
|
|
@ -57,7 +56,9 @@ export const Demo03StudentApi = {
|
||||||
|
|
||||||
/** 批量删除学生 */
|
/** 批量删除学生 */
|
||||||
deleteDemo03StudentList: async (ids: number[]) => {
|
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
|
// 导出学生 Excel
|
||||||
|
|
@ -69,13 +70,17 @@ export const Demo03StudentApi = {
|
||||||
|
|
||||||
// 获得学生课程列表
|
// 获得学生课程列表
|
||||||
getDemo03CourseListByStudentId: async (studentId) => {
|
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) => {
|
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) => {
|
export const getJobNextTimes = (id: number) => {
|
||||||
return request.get({ url: '/infra/job/get_next_times?id=' + id })
|
return request.get({ url: '/infra/job/get_next_times?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 同步定时任务到 Quartz
|
||||||
|
export const syncJob = () => {
|
||||||
|
return request.post({ url: '/infra/job/sync' })
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ export interface AlertConfig {
|
||||||
sceneRuleIds: string // 关联的场景联动规则编号数组
|
sceneRuleIds: string // 关联的场景联动规则编号数组
|
||||||
receiveUserIds: string // 接收的用户编号数组
|
receiveUserIds: string // 接收的用户编号数组
|
||||||
receiveTypes: string // 接收的类型数组
|
receiveTypes: string // 接收的类型数组
|
||||||
|
smsTemplateCode?: string // 短信模板编号
|
||||||
|
mailTemplateCode?: string // 邮件模板编号
|
||||||
|
notifyTemplateCode?: string // 站内信模板编号
|
||||||
}
|
}
|
||||||
|
|
||||||
// IoT 告警配置 API
|
// IoT 告警配置 API
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ export interface OtaTask {
|
||||||
name: string // 任务名称
|
name: string // 任务名称
|
||||||
description?: string // 任务描述
|
description?: string // 任务描述
|
||||||
firmwareId?: number // 固件编号
|
firmwareId?: number // 固件编号
|
||||||
status: number // 任务状态
|
status?: number // 任务状态
|
||||||
deviceScope?: number // 升级范围
|
deviceScope: number // 升级范围
|
||||||
deviceIds?: number[] // 指定设备ID列表(当升级范围为指定设备时使用)
|
deviceIds?: number[] // 指定设备ID列表(当升级范围为指定设备时使用)
|
||||||
deviceTotalCount?: number // 设备总共数量
|
deviceTotalCount?: number // 设备总共数量
|
||||||
deviceSuccessCount?: number // 设备成功数量
|
deviceSuccessCount?: number // 设备成功数量
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ export interface IotSceneRule {
|
||||||
id?: number // 场景编号
|
id?: number // 场景编号
|
||||||
name: string // 场景名称
|
name: string // 场景名称
|
||||||
description?: string // 场景描述
|
description?: string // 场景描述
|
||||||
|
lastTriggerTime?: string // 最近触发时间
|
||||||
status: number // 场景状态:0-开启,1-关闭
|
status: number // 场景状态:0-开启,1-关闭
|
||||||
triggers: Trigger[] // 触发器数组
|
triggers: Trigger[] // 触发器数组
|
||||||
actions: Action[] // 执行器数组
|
actions: Action[] // 执行器数组
|
||||||
|
|
|
||||||
|
|
@ -18,47 +18,35 @@ export interface ThingModelData {
|
||||||
service?: ThingModelService // 服务
|
service?: ThingModelService // 服务
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* ThingModelProperty 类型
|
|
||||||
*/
|
|
||||||
export interface ThingModelProperty {
|
|
||||||
[key: string]: any
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ThingModelEvent 类型
|
|
||||||
*/
|
|
||||||
export interface ThingModelEvent {
|
|
||||||
[key: string]: any
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ThingModelService 类型
|
|
||||||
*/
|
|
||||||
export interface ThingModelService {
|
|
||||||
[key: string]: any
|
|
||||||
}
|
|
||||||
|
|
||||||
/** dataSpecs 数值型数据结构 */
|
/** dataSpecs 数值型数据结构 */
|
||||||
export interface DataSpecsNumberData {
|
export interface DataSpecsNumberData {
|
||||||
dataType: 'int' | 'float' | 'double' // 数据类型,取值为 INT、FLOAT 或 DOUBLE
|
dataType: string // 数据类型,取值为 INT、FLOAT 或 DOUBLE
|
||||||
max: string // 最大值,必须与 dataType 设置一致,且为 STRING 类型
|
max?: string // 最大值,必须与 dataType 设置一致,且为 STRING 类型
|
||||||
min: string // 最小值,必须与 dataType 设置一致,且为 STRING 类型
|
min?: string // 最小值,必须与 dataType 设置一致,且为 STRING 类型
|
||||||
step: string // 步长,必须与 dataType 设置一致,且为 STRING 类型
|
step?: string // 步长,必须与 dataType 设置一致,且为 STRING 类型
|
||||||
precise?: string // 精度,当 dataType 为 FLOAT 或 DOUBLE 时可选
|
precise?: string // 精度,当 dataType 为 FLOAT 或 DOUBLE 时可选
|
||||||
defaultValue?: string // 默认值,可选
|
defaultValue?: string // 默认值,可选
|
||||||
unit: string // 单位的符号
|
unit?: string // 单位的符号
|
||||||
unitName: string // 单位的名称
|
unitName?: string // 单位的名称
|
||||||
}
|
}
|
||||||
|
|
||||||
/** dataSpecs 枚举型数据结构 */
|
/** dataSpecs 枚举型数据结构 */
|
||||||
export interface DataSpecsEnumOrBoolData {
|
export interface DataSpecsEnumOrBoolData {
|
||||||
dataType: 'enum' | 'bool'
|
dataType: string
|
||||||
defaultValue?: string // 默认值,可选
|
defaultValue?: string // 默认值,可选
|
||||||
name: string // 枚举项的名称
|
name: string // 枚举项的名称
|
||||||
value: number | undefined // 枚举值
|
value: number | undefined // 枚举值
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** dataSpecs 通用数据结构 */
|
||||||
|
export type ThingModelDataSpecs =
|
||||||
|
| DataSpecsNumberData
|
||||||
|
| DataSpecsEnumOrBoolData
|
||||||
|
| ThingModelDateOrTextDataSpecs
|
||||||
|
| ThingModelArrayDataSpecs
|
||||||
|
| ThingModelStructDataSpecs
|
||||||
|
| Record<string, any>
|
||||||
|
|
||||||
/** 物模型TSL响应数据结构 */
|
/** 物模型TSL响应数据结构 */
|
||||||
export interface IotThingModelTSLResp {
|
export interface IotThingModelTSLResp {
|
||||||
productId: number
|
productId: number
|
||||||
|
|
@ -76,8 +64,9 @@ export interface ThingModelProperty {
|
||||||
required?: boolean
|
required?: boolean
|
||||||
dataType: string
|
dataType: string
|
||||||
description?: string
|
description?: string
|
||||||
dataSpecs?: ThingModelProperty
|
dataSpecs?: ThingModelDataSpecs
|
||||||
dataSpecsList?: ThingModelProperty[]
|
dataSpecsList?: ThingModelPropertyDataSpecs[]
|
||||||
|
value?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 物模型事件 */
|
/** 物模型事件 */
|
||||||
|
|
@ -110,8 +99,8 @@ export interface ThingModelParam {
|
||||||
direction: string
|
direction: string
|
||||||
paraOrder?: number
|
paraOrder?: number
|
||||||
dataType: string
|
dataType: string
|
||||||
dataSpecs?: ThingModelProperty
|
dataSpecs?: ThingModelDataSpecs
|
||||||
dataSpecsList?: ThingModelProperty[]
|
dataSpecsList?: ThingModelPropertyDataSpecs[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 数值型数据规范 */
|
/** 数值型数据规范 */
|
||||||
|
|
@ -142,24 +131,26 @@ export interface ThingModelDateOrTextDataSpecs {
|
||||||
|
|
||||||
/** 数组型数据规范 */
|
/** 数组型数据规范 */
|
||||||
export interface ThingModelArrayDataSpecs {
|
export interface ThingModelArrayDataSpecs {
|
||||||
dataType: 'array'
|
dataType: string
|
||||||
size: number
|
size?: number
|
||||||
childDataType: string
|
childDataType?: string
|
||||||
dataSpecsList?: ThingModelProperty[]
|
dataSpecsList?: ThingModelPropertyDataSpecs[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 结构体型数据规范 */
|
/** 结构体型数据规范 */
|
||||||
export interface ThingModelStructDataSpecs {
|
export interface ThingModelStructDataSpecs {
|
||||||
dataType: 'struct'
|
dataType: string
|
||||||
identifier: string
|
identifier?: string
|
||||||
name: string
|
name?: string
|
||||||
accessMode: string
|
accessMode?: string
|
||||||
required?: boolean
|
required?: boolean
|
||||||
childDataType: string
|
childDataType?: string
|
||||||
dataSpecs?: ThingModelProperty
|
dataSpecs?: ThingModelDataSpecs
|
||||||
dataSpecsList?: ThingModelProperty[]
|
dataSpecsList?: ThingModelPropertyDataSpecs[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ThingModelPropertyDataSpecs = ThingModelProperty | DataSpecsEnumOrBoolData
|
||||||
|
|
||||||
// IoT 产品物模型 API
|
// IoT 产品物模型 API
|
||||||
export const ThingModelApi = {
|
export const ThingModelApi = {
|
||||||
// 查询产品物模型分页
|
// 查询产品物模型分页
|
||||||
|
|
@ -215,8 +206,8 @@ export const ThingModelFormRules = {
|
||||||
identifier: [
|
identifier: [
|
||||||
{ required: true, message: '标识符不能为空', trigger: 'blur' },
|
{ required: true, message: '标识符不能为空', trigger: 'blur' },
|
||||||
{
|
{
|
||||||
pattern: /^[a-zA-Z0-9_]{1,50}$/,
|
pattern: /^[a-zA-Z][a-zA-Z0-9_]{0,31}$/,
|
||||||
message: '支持大小写字母、数字和下划线,不超过 50 个字符',
|
message: '支持大小写字母、数字和下划线,必须以字母开头,不超过 32 个字符',
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,17 @@ import request from '@/config/axios'
|
||||||
|
|
||||||
export interface Favorite {
|
export interface Favorite {
|
||||||
id?: number
|
id?: number
|
||||||
userId?: string // 用户编号
|
userId?: number // 用户编号
|
||||||
spuId?: number | null // 商品 SPU 编号
|
spuId?: number | null // 商品 SPU 编号
|
||||||
|
name?: string
|
||||||
|
picUrl?: string
|
||||||
|
price?: number
|
||||||
|
salesCount?: number
|
||||||
|
createTime?: Date
|
||||||
|
status?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获得 ProductFavorite 列表
|
// 获得 ProductFavorite 列表
|
||||||
export const getFavoritePage = (params: PageParam) => {
|
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 })
|
return request.get({ url: '/product/spu/page', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获得 Spu 列表 tabsCount
|
// 获得 Spu 列表 tabsCount(支持按 name/categoryId/createTime 筛选)
|
||||||
export const getTabsCount = () => {
|
export const getTabsCount = (params?: any) => {
|
||||||
return request.get({ url: '/product/spu/get-count' })
|
return request.get({ url: '/product/spu/get-count', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建商品 Spu
|
// 创建商品 Spu
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ export interface CombinationActivityVO {
|
||||||
id?: number
|
id?: number
|
||||||
name?: string
|
name?: string
|
||||||
spuId?: number
|
spuId?: number
|
||||||
|
spuName?: string
|
||||||
|
picUrl?: string
|
||||||
totalLimitCount?: number
|
totalLimitCount?: number
|
||||||
singleLimitCount?: number
|
singleLimitCount?: number
|
||||||
startTime?: Date
|
startTime?: Date
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,10 @@ export interface RewardActivityVO {
|
||||||
conditionType?: number
|
conditionType?: number
|
||||||
productScope?: number
|
productScope?: number
|
||||||
rules: RewardRule[]
|
rules: RewardRule[]
|
||||||
|
productScopeValues: number[] // 商品范围:值为品类编号列表、商品编号列表
|
||||||
// 如下仅用于表单,不提交
|
// 如下仅用于表单,不提交
|
||||||
productScopeValues?: number[] // 商品范围:值为品类编号列表、商品编号列表
|
productCategoryIds: number[]
|
||||||
productCategoryIds?: number[]
|
productSpuIds: number[]
|
||||||
productSpuIds?: number[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 优惠规则
|
// 优惠规则
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ export interface SeckillActivityVO {
|
||||||
id?: number
|
id?: number
|
||||||
spuId?: number
|
spuId?: number
|
||||||
name?: string
|
name?: string
|
||||||
|
picUrl?: string
|
||||||
status?: number
|
status?: number
|
||||||
remark?: string
|
remark?: string
|
||||||
startTime?: Date
|
startTime?: Date
|
||||||
|
|
|
||||||
|
|
@ -115,5 +115,7 @@ export const getOrderCountTrendComparison = (
|
||||||
|
|
||||||
/** 时间参数需要格式化, 确保接口能识别 */
|
/** 时间参数需要格式化, 确保接口能识别 */
|
||||||
const formatDateParam = (params: TradeTrendReqVO) => {
|
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 request from '@/config/axios'
|
||||||
|
import type { OrderItemRespVO, OrderVO } from '@/api/mall/trade/order'
|
||||||
|
|
||||||
export interface TradeAfterSaleVO {
|
export interface TradeAfterSaleVO {
|
||||||
id?: number | null // 售后编号,主键自增
|
id?: number | null // 售后编号,主键自增
|
||||||
|
|
@ -32,6 +33,21 @@ export interface TradeAfterSaleVO {
|
||||||
receiveReason?: string // 收货备注
|
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 {
|
export interface ProductPropertiesVO {
|
||||||
propertyId?: number | null // 属性的编号
|
propertyId?: number | null // 属性的编号
|
||||||
propertyName?: string // 属性的名称
|
propertyName?: string // 属性的名称
|
||||||
|
|
@ -41,12 +57,15 @@ export interface ProductPropertiesVO {
|
||||||
|
|
||||||
// 获得交易售后分页
|
// 获得交易售后分页
|
||||||
export const getAfterSalePage = async (params) => {
|
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) => {
|
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) => {
|
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) => {
|
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'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface ConfigVO {
|
export interface ConfigVO {
|
||||||
|
id?: number | null
|
||||||
|
afterSaleRefundReasons: string[]
|
||||||
|
afterSaleReturnReasons: string[]
|
||||||
|
deliveryExpressFreeEnabled: boolean
|
||||||
|
deliveryExpressFreePrice: number
|
||||||
|
deliveryPickUpEnabled: boolean
|
||||||
brokerageEnabled: boolean
|
brokerageEnabled: boolean
|
||||||
brokerageEnabledCondition: number
|
brokerageEnabledCondition?: number
|
||||||
brokerageBindMode: number
|
brokerageBindMode?: number
|
||||||
brokeragePosterUrls: string
|
brokeragePosterUrls: string[]
|
||||||
brokerageFirstPercent: number
|
brokerageFirstPercent: number
|
||||||
brokerageSecondPercent: number
|
brokerageSecondPercent: number
|
||||||
brokerageWithdrawMinPrice: number
|
brokerageWithdrawMinPrice: number
|
||||||
|
brokerageWithdrawFeePercent: number
|
||||||
brokerageFrozenDays: number
|
brokerageFrozenDays: number
|
||||||
brokerageWithdrawTypes: string
|
brokerageWithdrawTypes: number[]
|
||||||
|
tencentLbsKey?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询交易中心配置详情
|
// 查询交易中心配置详情
|
||||||
export const getTradeConfig = async () => {
|
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'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface DeliveryExpressVO {
|
export interface DeliveryExpressVO {
|
||||||
id: number
|
id?: number
|
||||||
code: string
|
code: string
|
||||||
name: string
|
name: string
|
||||||
logo: string
|
logo: string
|
||||||
|
|
@ -11,17 +11,20 @@ export interface DeliveryExpressVO {
|
||||||
|
|
||||||
// 查询快递公司列表
|
// 查询快递公司列表
|
||||||
export const getDeliveryExpressPage = async (params: PageParam) => {
|
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) => {
|
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 = () => {
|
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'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface DeliveryExpressTemplateVO {
|
export interface DeliveryExpressTemplateVO {
|
||||||
id: number
|
id?: number
|
||||||
name: string
|
name: string
|
||||||
chargeMode: number
|
chargeMode: number
|
||||||
sort: number
|
sort: number
|
||||||
templateCharge: ExpressTemplateChargeVO[]
|
charges: ExpressTemplateChargeVO[]
|
||||||
templateFree: ExpressTemplateFreeVO[]
|
frees: ExpressTemplateFreeVO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export declare type ExpressTemplateChargeVO = {
|
export declare type ExpressTemplateChargeVO = {
|
||||||
|
|
@ -25,17 +25,24 @@ export declare type ExpressTemplateFreeVO = {
|
||||||
|
|
||||||
// 查询快递运费模板列表
|
// 查询快递运费模板列表
|
||||||
export const getDeliveryExpressTemplatePage = async (params: PageParam) => {
|
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) => {
|
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 () => {
|
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 request from '@/config/axios'
|
||||||
|
import type { UserVO } from '@/api/system/user'
|
||||||
|
|
||||||
export interface DeliveryPickUpStoreVO {
|
export interface DeliveryPickUpStoreVO {
|
||||||
id: number
|
id?: number
|
||||||
name: string
|
name: string
|
||||||
introduction: string
|
introduction: string
|
||||||
phone: string
|
phone: string
|
||||||
areaId: number
|
areaId?: number
|
||||||
detailAddress: string
|
detailAddress: string
|
||||||
logo: string
|
logo: string
|
||||||
openingTime: string
|
openingTime?: string
|
||||||
closingTime: string
|
closingTime?: string
|
||||||
latitude: number
|
latitude?: number
|
||||||
longitude: number
|
longitude?: number
|
||||||
status: number
|
status: number
|
||||||
verifyUserIds: number[] // 绑定用户编号组数
|
verifyUserIds?: number[] // 绑定用户编号组数
|
||||||
|
verifyUsers?: UserVO[] // 绑定用户列表
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DeliveryPickUpStoreBindReqVO {
|
||||||
|
id: number
|
||||||
|
verifyUserIds: number[]
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询自提门店列表
|
// 查询自提门店列表
|
||||||
export const getDeliveryPickUpStorePage = async (params: any) => {
|
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) => {
|
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[]> => {
|
export const getSimpleDeliveryPickUpStoreList = async () => {
|
||||||
return await request.get({ url: '/trade/delivery/pick-up-store/simple-list' })
|
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 })
|
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) => {
|
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) => {
|
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) => {
|
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 {
|
export interface DeliveryVO {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface ConfigVO {
|
export interface ConfigVO {
|
||||||
id: number
|
id?: number
|
||||||
pointTradeDeductEnable: number
|
pointTradeDeductEnable: boolean
|
||||||
pointTradeDeductUnitPrice: number
|
pointTradeDeductUnitPrice: number
|
||||||
pointTradeDeductMaxPrice: number
|
pointTradeDeductMaxPrice: number
|
||||||
pointTradeGivePoint: number
|
pointTradeGivePoint: number
|
||||||
|
|
@ -10,7 +10,7 @@ export interface ConfigVO {
|
||||||
|
|
||||||
// 查询积分设置详情
|
// 查询积分设置详情
|
||||||
export const getConfig = async () => {
|
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) => {
|
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) => {
|
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,35 +1,51 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface UserVO {
|
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
|
id: number
|
||||||
avatar: string | undefined
|
levelId: number
|
||||||
birthday: number | undefined
|
reason: string
|
||||||
createTime: number | undefined
|
}
|
||||||
loginDate: number | undefined
|
|
||||||
loginIp: string
|
export interface UserPointUpdateReqVO {
|
||||||
mark: string
|
id: number
|
||||||
mobile: string
|
point: number
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询会员用户列表
|
// 查询会员用户列表
|
||||||
export const getUserPage = async (params) => {
|
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) => {
|
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 })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改会员用户
|
// 修改会员用户
|
||||||
|
|
@ -38,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 })
|
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 })
|
return await request.put({ url: `/member/user/update-point`, data })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,14 @@ import request from '@/config/axios'
|
||||||
|
|
||||||
// MES 物料产品分类 VO
|
// MES 物料产品分类 VO
|
||||||
export interface MdItemTypeVO {
|
export interface MdItemTypeVO {
|
||||||
id: number // 分类编号
|
id?: number // 分类编号
|
||||||
parentId: number // 父分类编号
|
parentId?: number // 父分类编号
|
||||||
code: string // 分类编码
|
code?: string // 分类编码
|
||||||
name: string // 分类名称
|
name?: string // 分类名称
|
||||||
itemOrProduct: string // 物料/产品标识
|
itemOrProduct: string // 物料/产品标识
|
||||||
sort: number // 显示排序
|
sort: number // 显示排序
|
||||||
status: number // 状态
|
status: number // 状态
|
||||||
remark: string // 备注
|
remark?: string // 备注
|
||||||
}
|
}
|
||||||
|
|
||||||
// MES 物料产品分类 API
|
// MES 物料产品分类 API
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,14 @@ import request from '@/config/axios'
|
||||||
|
|
||||||
// MES 计量单位 VO
|
// MES 计量单位 VO
|
||||||
export interface MdUnitMeasureVO {
|
export interface MdUnitMeasureVO {
|
||||||
id: number // 单位编号
|
id?: number // 单位编号
|
||||||
code: string // 单位编码
|
code?: string // 单位编码
|
||||||
name: string // 单位名称
|
name?: string // 单位名称
|
||||||
primaryFlag: boolean // 是否主单位
|
primaryFlag: boolean // 是否主单位
|
||||||
primaryId: number // 主单位编号
|
primaryId?: number // 主单位编号
|
||||||
changeRate: number // 与主单位换算比例
|
changeRate?: number // 与主单位换算比例
|
||||||
status: number // 状态
|
status: number // 状态
|
||||||
remark: string // 备注
|
remark?: string // 备注
|
||||||
}
|
}
|
||||||
|
|
||||||
// MES 计量单位 API
|
// MES 计量单位 API
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ export interface ProAndonConfigVO {
|
||||||
reason: string // 呼叫原因
|
reason: string // 呼叫原因
|
||||||
level: number // 级别
|
level: number // 级别
|
||||||
handlerRoleId: number // 处置人角色编号
|
handlerRoleId: number // 处置人角色编号
|
||||||
|
handlerRoleName: string // 处置人角色名称
|
||||||
handlerUserId: number // 处置人编号
|
handlerUserId: number // 处置人编号
|
||||||
handlerUserNickname: string // 处置人昵称
|
handlerUserNickname: string // 处置人昵称
|
||||||
remark: string // 备注
|
remark: string // 备注
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ export interface WmMiscIssueVO {
|
||||||
id: number
|
id: number
|
||||||
code: string
|
code: string
|
||||||
name: string
|
name: string
|
||||||
type: string
|
type: number
|
||||||
sourceDocType: string
|
sourceDocType: string
|
||||||
sourceDocId: number
|
sourceDocId: number
|
||||||
sourceDocCode: string
|
sourceDocCode: string
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,20 @@ export interface WmSnGroupVO {
|
||||||
createTime?: Date
|
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 {
|
export interface WmSnGenerateVO {
|
||||||
itemId?: number
|
itemId?: number
|
||||||
batchCode?: string
|
batchCode?: string
|
||||||
|
|
@ -30,6 +44,11 @@ export const getSnGroupPage = async (params: any) => {
|
||||||
return await request.get({ url: `/mes/wm/sn/group-page`, params })
|
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)
|
// 批量删除 SN 码(按批次 UUID)
|
||||||
export const deleteSnBatch = async (uuid: string) => {
|
export const deleteSnBatch = async (uuid: string) => {
|
||||||
return await request.delete({ url: `/mes/wm/sn/delete-batch`, params: { uuid } })
|
return await request.delete({ url: `/mes/wm/sn/delete-batch`, params: { uuid } })
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,11 @@ export interface TagVO {
|
||||||
createTime: Date
|
createTime: Date
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface SimpleTagVO {
|
||||||
|
tagId: number
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
|
||||||
// 创建公众号标签
|
// 创建公众号标签
|
||||||
export const createTag = (data: TagVO) => {
|
export const createTag = (data: TagVO) => {
|
||||||
return request.post({
|
return request.post({
|
||||||
|
|
@ -47,7 +52,7 @@ export const getTagPage = (query: PageParam) => {
|
||||||
|
|
||||||
// 获取公众号标签精简信息列表
|
// 获取公众号标签精简信息列表
|
||||||
export const getSimpleTagList = () => {
|
export const getSimpleTagList = () => {
|
||||||
return request.get({
|
return request.get<SimpleTagVO[]>({
|
||||||
url: '/mp/tag/list-all-simple'
|
url: '/mp/tag/list-all-simple'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ export const deleteApp = (id: number) => {
|
||||||
|
|
||||||
// 获得支付应用列表
|
// 获得支付应用列表
|
||||||
export const getAppList = () => {
|
export const getAppList = () => {
|
||||||
return request.get({
|
return request.get<AppVO[]>({
|
||||||
url: '/pay/app/list'
|
url: '/pay/app/list'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,43 @@
|
||||||
import request from '@/config/axios'
|
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) => {
|
export const getNotifyTaskDetail = (id: number) => {
|
||||||
return request.get({
|
return request.get<NotifyTaskVO>({
|
||||||
url: '/pay/notify/get-detail?id=' + id
|
url: '/pay/notify/get-detail?id=' + id
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获得支付通知分页
|
// 获得支付通知分页
|
||||||
export const getNotifyTaskPage = (query) => {
|
export const getNotifyTaskPage = (query: any) => {
|
||||||
return request.get({
|
return request.get<PageResult<NotifyTaskVO[]>>({
|
||||||
url: '/pay/notify/page',
|
url: '/pay/notify/page',
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ export interface OrderVO {
|
||||||
notifyUrl: string
|
notifyUrl: string
|
||||||
notifyStatus: number
|
notifyStatus: number
|
||||||
amount: number
|
amount: number
|
||||||
|
price: number
|
||||||
channelFeeRate: number
|
channelFeeRate: number
|
||||||
channelFeeAmount: number
|
channelFeeAmount: number
|
||||||
status: number
|
status: number
|
||||||
|
|
@ -28,64 +29,43 @@ export interface OrderVO {
|
||||||
createTime: Date
|
createTime: Date
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OrderPageReqVO extends PageParam {
|
export interface OrderDetailVO {
|
||||||
merchantId?: number
|
|
||||||
appId?: number
|
|
||||||
channelId?: number
|
|
||||||
channelCode?: string
|
|
||||||
merchantOrderId?: string
|
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
|
subject?: string
|
||||||
body?: string
|
body?: string
|
||||||
notifyUrl?: string
|
channelCode?: string
|
||||||
notifyStatus?: number
|
userIp?: string
|
||||||
amount?: number
|
|
||||||
channelFeeRate?: number
|
|
||||||
channelFeeAmount?: number
|
|
||||||
status?: number
|
|
||||||
expireTime?: Date[]
|
|
||||||
successTime?: Date[]
|
|
||||||
notifyTime?: Date[]
|
|
||||||
successExtensionId?: number
|
|
||||||
refundStatus?: number
|
|
||||||
refundTimes?: number
|
|
||||||
channelUserId?: string
|
|
||||||
channelOrderNo?: string
|
channelOrderNo?: string
|
||||||
createTime?: Date[]
|
channelUserId?: string
|
||||||
|
notifyUrl?: string
|
||||||
|
extension?: {
|
||||||
|
channelNotifyData?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
|
||||||
channelOrderNo?: string
|
|
||||||
createTime?: Date[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询列表支付订单
|
// 查询列表支付订单
|
||||||
export const getOrderPage = async (params: OrderPageReqVO) => {
|
export const getOrderPage = async (params: any) => {
|
||||||
return await request.get({ url: '/pay/order/page', params })
|
return await request.get<PageResult<OrderDetailVO[]>>({
|
||||||
|
url: '/pay/order/page',
|
||||||
|
params
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询详情支付订单
|
// 查询详情支付订单
|
||||||
export const getOrder = async (id: number, sync?: boolean) => {
|
export const getOrder = async (id: number, sync?: boolean) => {
|
||||||
return await request.get({
|
return await request.get<OrderVO>({
|
||||||
url: '/pay/order/get',
|
url: '/pay/order/get',
|
||||||
params: {
|
params: {
|
||||||
id,
|
id,
|
||||||
|
|
@ -96,7 +76,7 @@ export const getOrder = async (id: number, sync?: boolean) => {
|
||||||
|
|
||||||
// 获得支付订单的明细
|
// 获得支付订单的明细
|
||||||
export const getOrderDetail = async (id: number) => {
|
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 })
|
return await request.download({ url: '/pay/order/export-excel', params })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,70 +29,36 @@ export interface RefundVO {
|
||||||
createTime: Date
|
createTime: Date
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RefundPageReqVO extends PageParam {
|
export interface RefundDetailVO {
|
||||||
merchantId?: number
|
merchantRefundId?: string
|
||||||
appId?: number
|
channelRefundNo?: string
|
||||||
channelId?: number
|
|
||||||
channelCode?: string
|
|
||||||
orderId?: string
|
|
||||||
tradeNo?: string
|
|
||||||
merchantOrderId?: string
|
merchantOrderId?: string
|
||||||
merchantRefundNo?: string
|
channelOrderNo?: string
|
||||||
notifyUrl?: string
|
appId?: number
|
||||||
notifyStatus?: number
|
appName?: string
|
||||||
|
payPrice?: number
|
||||||
|
refundPrice?: number
|
||||||
status?: number
|
status?: number
|
||||||
type?: number
|
successTime?: Date
|
||||||
payAmount?: number
|
createTime?: Date
|
||||||
refundAmount?: number
|
updateTime?: Date
|
||||||
|
channelCode?: string
|
||||||
reason?: string
|
reason?: string
|
||||||
userIp?: 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
|
notifyUrl?: string
|
||||||
notifyStatus?: number
|
|
||||||
status?: number
|
|
||||||
type?: number
|
|
||||||
payAmount?: number
|
|
||||||
refundAmount?: number
|
|
||||||
reason?: string
|
|
||||||
userIp?: string
|
|
||||||
channelOrderNo?: string
|
|
||||||
channelRefundNo?: string
|
|
||||||
channelErrorCode?: string
|
channelErrorCode?: string
|
||||||
channelErrorMsg?: string
|
channelErrorMsg?: string
|
||||||
channelExtras?: string
|
channelNotifyData?: string
|
||||||
expireTime?: Date[]
|
|
||||||
successTime?: Date[]
|
|
||||||
notifyTime?: Date[]
|
|
||||||
createTime?: Date[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询列表退款订单
|
// 查询列表退款订单
|
||||||
export const getRefundPage = (params: RefundPageReqVO) => {
|
export const getRefundPage = (params: any) => {
|
||||||
return request.get({ url: '/pay/refund/page', params })
|
return request.get<PageResult<RefundDetailVO[]>>({ url: '/pay/refund/page', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询详情退款订单
|
// 查询详情退款订单
|
||||||
export const getRefund = (id: number) => {
|
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 })
|
return request.download({ url: '/pay/refund/export-excel', params })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,42 @@
|
||||||
import request from '@/config/axios'
|
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) => {
|
export const getTransferPage = async (params: any) => {
|
||||||
return await request.get({ url: `/pay/transfer/page`, params })
|
return await request.get<PageResult<TransferVO[]>>({
|
||||||
|
url: `/pay/transfer/page`,
|
||||||
|
params
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询转账单详情
|
// 查询转账单详情
|
||||||
export const getTransfer = async (id: number) => {
|
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 })
|
return await request.download({ url: '/pay/transfer/export-excel', params })
|
||||||
}
|
}
|
||||||
|
|
|
||||||