Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1411e0fde | ||
|
|
a9bac9d3bf | ||
|
|
57a35f2f9d | ||
|
|
42d7049318 | ||
|
|
3960f14cd6 | ||
|
|
f087d6ba57 | ||
|
|
401c7c1dd6 | ||
|
|
0c92763537 | ||
|
|
22d5881e21 | ||
|
|
11b4ce4c95 | ||
|
|
4c914b2bce | ||
|
|
feec151583 | ||
|
|
b984cfed05 | ||
|
|
33014b8ca5 | ||
|
|
2d3114a772 | ||
|
|
c3ddb8acee | ||
|
|
1b95dc7655 | ||
|
|
56676b1222 | ||
|
|
88f1d3b41b | ||
|
|
a44073ab70 | ||
|
|
38633f0dd7 | ||
|
|
b07ea27fdc | ||
|
|
eadb1571b1 | ||
|
|
79523f9977 | ||
|
|
0745c147e0 | ||
|
|
3d5e0ab41d | ||
|
|
23f7f8ecf1 | ||
|
|
5daecfe0d9 | ||
|
|
dc89dd0b59 | ||
|
|
a14b99cc60 | ||
|
|
ef873cd140 | ||
|
|
711391fc4f | ||
|
|
45c15dd277 | ||
|
|
6ee9a5692b | ||
|
|
94ee3201e2 | ||
|
|
f68a0f9b5e | ||
|
|
55918f7d1a | ||
|
|
699d92a217 | ||
|
|
0419ea5dcb | ||
|
|
e938f9bd1e | ||
|
|
8b0b3bec3a | ||
|
|
c09424be8f | ||
|
|
6dd2bbde5e | ||
|
|
b122ec26c7 | ||
|
|
8541ba1120 | ||
|
|
fdc1587225 | ||
|
|
21fde5a6e4 | ||
|
|
72e9ded8e2 | ||
|
|
f447cf5b15 | ||
|
|
476498e6ad | ||
|
|
1c9956bb4b | ||
|
|
035606e184 | ||
|
|
957f961c65 | ||
|
|
efac1c0777 | ||
|
|
a53435091e | ||
|
|
407cec8df6 | ||
|
|
c1522f1cbe | ||
|
|
e7544d1db1 | ||
|
|
06bb6e9f44 | ||
|
|
4b7d0604f4 | ||
|
|
82b68c3a79 | ||
|
|
b5ef61a601 | ||
|
|
08ac9db5eb | ||
|
|
848cc46015 | ||
|
|
d87856a6f0 | ||
|
|
f5f071f1dc | ||
|
|
461dc7f28b | ||
|
|
fdc1f7e3eb | ||
|
|
8442be7e19 | ||
|
|
11a4d26096 | ||
|
|
cb013c2c87 | ||
|
|
b0153e20bb | ||
|
|
1f9f43467a | ||
|
|
b21b23e07e | ||
|
|
9817d4c39b | ||
|
|
6cf155bff7 | ||
|
|
6cf960c101 | ||
|
|
16a98e5a21 | ||
|
|
8d9d9e76b8 | ||
|
|
dafc54c7dd | ||
|
|
9262fe5767 | ||
|
|
e75dbd6762 | ||
|
|
17415a5368 | ||
|
|
cf122fa344 | ||
|
|
05393006c1 | ||
|
|
047b9f327f | ||
|
|
ce3b95d1ec | ||
|
|
3d4c8f24c7 | ||
|
|
28c1e2d5f0 | ||
|
|
286628d101 | ||
|
|
c3ad1ec30a | ||
|
|
80ac4b0d7a | ||
|
|
5216d184a9 | ||
|
|
7508eb5998 | ||
|
|
1403ac0763 | ||
|
|
ae03503ee4 | ||
|
|
a186806456 | ||
|
|
6197c144b6 | ||
|
|
a4fe1db1a5 | ||
|
|
913c995562 | ||
|
|
a5c533bff0 | ||
|
|
4b554204a7 | ||
|
|
70821d1b12 | ||
|
|
772deb5016 | ||
|
|
1b3cbfc881 | ||
|
|
0439ad29ba | ||
|
|
20a2ced413 | ||
|
|
e29d6f910a | ||
|
|
c87ed7fe17 | ||
|
|
41f2c7199e | ||
|
|
02baa4c58a | ||
|
|
07d39d7428 | ||
|
|
fd3b659fe9 | ||
|
|
79507aef6d | ||
|
|
9ca5ffbf22 | ||
|
|
78e29940be | ||
|
|
98cf770f7a | ||
|
|
72b1aa07f9 | ||
|
|
6a6f52c4c4 | ||
|
|
5cfe0661d2 | ||
|
|
67c7fb3856 | ||
|
|
19aef88d9b | ||
|
|
9f96c6177d | ||
|
|
d9db5818b8 | ||
|
|
3c52808bfb | ||
|
|
8ede888784 | ||
|
|
b8e353871d | ||
|
|
22e97ef62b | ||
|
|
d2b993311f | ||
|
|
b452b08a80 | ||
|
|
7d352397e8 | ||
|
|
9679a6df18 | ||
|
|
5c6cd4dda0 | ||
|
|
f308be80da | ||
|
|
b63179ef42 | ||
|
|
824b0328f1 | ||
|
|
46b81b2937 | ||
|
|
be6ae75ce5 | ||
|
|
4092bcc534 | ||
|
|
56c4ed366f | ||
|
|
75575be221 | ||
|
|
38f0aff482 | ||
|
|
59062a1c17 | ||
|
|
5c0a0e660b | ||
|
|
a1f1f9ae99 | ||
|
|
19caff2109 | ||
|
|
95452312c5 | ||
|
|
49cca0cde0 | ||
|
|
5538e6e05a | ||
|
|
3685e438fa | ||
|
|
77a0801a37 | ||
|
|
8a7e2291e7 | ||
|
|
1d17c18f41 | ||
|
|
9e5726d599 | ||
|
|
9376374ca9 | ||
|
|
fc9995d8c8 | ||
|
|
221c9d58ca | ||
|
|
065cb816d2 | ||
|
|
fd0b7be89f | ||
|
|
2fd3422c06 | ||
|
|
b95cac2e70 | ||
|
|
47e1cd9c1d | ||
|
|
82e9b1bcff | ||
|
|
e38b96c959 | ||
|
|
0e452aa1a7 | ||
|
|
202d4b6795 | ||
|
|
8244050ea0 | ||
|
|
6636068bd5 | ||
|
|
3725e9d352 | ||
|
|
63b8dd5729 | ||
|
|
5b6616a144 | ||
|
|
d4a90b7dd5 | ||
|
|
24895bedb3 | ||
|
|
c65c056c8f | ||
|
|
2ef484e700 | ||
|
|
ae632ac23b | ||
|
|
3b5a0ae290 | ||
|
|
c2e99fb427 | ||
|
|
a383363e69 | ||
|
|
0f4216f6f7 | ||
|
|
c2a6b02b57 | ||
|
|
45ceacdcac | ||
|
|
a26cb120d1 | ||
|
|
2a73b9c4fc | ||
|
|
5259db9eaa | ||
|
|
bcecf5c750 | ||
|
|
ca791df4de | ||
|
|
cc1a025a4e | ||
|
|
21b65324a7 | ||
|
|
20564ed803 | ||
|
|
f974bf236e | ||
|
|
986d1cdfc2 | ||
|
|
8ef39c76d6 | ||
|
|
192453e47d | ||
|
|
9a382530ae | ||
|
|
7993c32f94 | ||
|
|
8d8ada1751 | ||
|
|
a911af3f29 | ||
|
|
520c9af43c | ||
|
|
1958c2bb9d | ||
|
|
809fb9fdfc | ||
|
|
de41b6cdba | ||
|
|
da91896419 | ||
|
|
bd9cdb73af | ||
|
|
aeb59de673 | ||
|
|
7cd6a5d9b4 | ||
|
|
3ef04b55bc | ||
|
|
971dc4a4c2 | ||
|
|
10c65d3967 | ||
|
|
b7d7b11d31 | ||
|
|
94091598a3 | ||
|
|
cf03e72264 | ||
|
|
9640531c2a | ||
|
|
5137b4a4cb | ||
|
|
29dfd4550e | ||
|
|
068ffc9d53 | ||
|
|
5258c7b81a | ||
|
|
afca393cac | ||
|
|
c304d456c3 | ||
|
|
4547fbf2ce | ||
|
|
b95a2b9796 | ||
|
|
1b9a3dd4fe | ||
|
|
d6eb0cd850 | ||
|
|
d0b0c8d502 | ||
|
|
9a3d1ad934 | ||
|
|
b7d6c94657 | ||
|
|
4dfc8c1b04 | ||
|
|
b72768ab4f | ||
|
|
91c3b94283 | ||
|
|
7652c41220 | ||
|
|
9994059cad | ||
|
|
5f2a220007 | ||
|
|
74d560a19e | ||
|
|
bad11ff29b | ||
|
|
f92ab64ffc | ||
|
|
8c9bf45791 | ||
|
|
2ff1bccbaf | ||
|
|
d7664c92cd | ||
|
|
303bbbdd7f | ||
|
|
59528284ca | ||
|
|
b346545cbf | ||
|
|
de35fd0a7c | ||
|
|
ce0020ab1c | ||
|
|
50df1f3e13 | ||
|
|
dc577fc0f6 | ||
|
|
b0d839a091 | ||
|
|
d9019c1271 | ||
|
|
32f2d406c3 | ||
|
|
3154aa7539 | ||
|
|
64ff45e46c | ||
|
|
cd0f1322fb | ||
|
|
2f8f5454b3 | ||
|
|
31a0e9e824 | ||
|
|
9c9f09fbed | ||
|
|
a061265d9e | ||
|
|
163fc682df | ||
|
|
dd1eb5de6d | ||
|
|
67fb5ecf3a | ||
|
|
57af8e22e7 | ||
|
|
2c35cde574 | ||
|
|
92fe34ce59 | ||
|
|
c7b135e1f8 | ||
|
|
bfe43369ef | ||
|
|
2081dda9df | ||
|
|
e85c1b0a55 | ||
|
|
357955ce24 | ||
|
|
0afa0bb165 | ||
|
|
4f1c79ba6d | ||
|
|
b2ddefe4a0 | ||
|
|
5d20f62b40 | ||
|
|
ab86cb1ff9 | ||
|
|
1a4c94b830 | ||
|
|
3906204bb9 | ||
|
|
bf96e8aeaf | ||
|
|
0d7d2cd1c3 | ||
|
|
1de17cadb5 | ||
|
|
ee8de08103 | ||
|
|
b53bfbd49e | ||
|
|
7467b0b4e0 | ||
|
|
91e2e32ace | ||
|
|
b03711e0df | ||
|
|
58825842ab | ||
|
|
f9c7446186 | ||
|
|
b3326db715 | ||
|
|
67371e7579 | ||
|
|
be6c15f5df | ||
|
|
78e658389b | ||
|
|
903428d063 | ||
|
|
54d67b3761 | ||
|
|
78d8782b5d | ||
|
|
6be64a219e | ||
|
|
9991ef2ec5 | ||
|
|
20e84b072e | ||
|
|
425e66b0f0 | ||
|
|
f3a839486d | ||
|
|
9e7fe02baf | ||
|
|
f7a2949ad1 | ||
|
|
f91868b4f6 | ||
|
|
583587ce52 | ||
|
|
c6ffe4a779 | ||
|
|
a27dad6129 | ||
|
|
3f1024d31c | ||
|
|
0212ef4851 | ||
|
|
6b6b634f49 | ||
|
|
a69d1d2dbe | ||
|
|
0f812dbfd9 | ||
|
|
26e28965c9 | ||
|
|
3ce8fc1364 | ||
|
|
45ac20e5c3 | ||
|
|
ead7fa26ab | ||
|
|
2511f32c86 | ||
|
|
a0b90bd93d | ||
|
|
4e3522a5da | ||
|
|
253678a949 | ||
|
|
9a233ab6bf | ||
|
|
666fb16db5 | ||
|
|
575f6038a7 | ||
|
|
81fb177169 | ||
|
|
a190a0b409 | ||
|
|
4ea25f3d5b | ||
|
|
d0da7d67c7 | ||
|
|
4f8b2830ba | ||
|
|
bc33acfad4 | ||
|
|
c039696288 | ||
|
|
1b0fe23292 | ||
|
|
85c6971132 | ||
|
|
483bf23a52 | ||
|
|
0837f319ca | ||
|
|
5f2a6baa4d | ||
|
|
b2ba183e09 | ||
|
|
f7b97d344e | ||
|
|
107ee7bebf | ||
|
|
1cafde3877 | ||
|
|
10a698b9ad | ||
|
|
bffa42aec6 | ||
|
|
a39698d6ab | ||
|
|
c6f70cce00 | ||
|
|
f4a83c091d | ||
|
|
b0d4e39e68 | ||
|
|
d40f1c3150 | ||
|
|
60af2c6e7e | ||
|
|
1f4c70a176 | ||
|
|
e0880db65c | ||
|
|
bfdf7f6173 | ||
|
|
e32fc81df6 | ||
|
|
59842b09c9 | ||
|
|
9c2619851a | ||
|
|
229594b159 | ||
|
|
5d32cc3821 | ||
|
|
25f5b104ce | ||
|
|
7be9c3e80e | ||
|
|
d27cb80065 | ||
|
|
c830c2b9bb | ||
|
|
18617d309b | ||
|
|
3c73a6728f | ||
|
|
b9193dd875 | ||
|
|
2ab3b9ccd7 | ||
|
|
9581ecd7c7 | ||
|
|
fec0753d9b | ||
|
|
815c900064 | ||
|
|
736b82de18 | ||
|
|
3d65f1c599 | ||
|
|
5d2605fcae | ||
|
|
5e801a8e63 | ||
|
|
62ad543163 | ||
|
|
503a35f44e | ||
|
|
bd48210d7f | ||
|
|
79a53412d6 | ||
|
|
f35f62d2f8 | ||
|
|
475385bd43 | ||
|
|
cea84173da | ||
|
|
00dfe00d46 | ||
|
|
5f5ae354d2 | ||
|
|
410e257a47 | ||
|
|
e726c1dcba | ||
|
|
107b1d3778 | ||
|
|
473d681c11 | ||
|
|
52c393a04b | ||
|
|
e9a4efbf6a | ||
|
|
092a8acde4 | ||
|
|
a88c86d44c | ||
|
|
d2954776a5 | ||
|
|
7db5ac81ae | ||
|
|
e3db7d3014 | ||
|
|
b7329b0c44 | ||
|
|
a61a405346 | ||
|
|
6c504adcbc | ||
|
|
8e8475ffdc | ||
|
|
ab83cee50f | ||
|
|
99a44e8c01 | ||
|
|
0bbf4c9143 | ||
|
|
9e26e902a7 | ||
|
|
8ff63622ec | ||
|
|
4319d86978 | ||
|
|
7f50584a02 | ||
|
|
7043dea354 | ||
|
|
1cb06911c7 | ||
|
|
3ae486c39f | ||
|
|
c514c799ff | ||
|
|
58455cd0a4 | ||
|
|
bf437421bb | ||
|
|
09e406618c | ||
|
|
5832fd687f | ||
|
|
a96873ef5d | ||
|
|
951ce1cf50 | ||
|
|
9495c2c63a | ||
|
|
c435e2c9e8 | ||
|
|
b60693036d | ||
|
|
c50f59d181 | ||
|
|
39106843f3 | ||
|
|
15b0414604 | ||
|
|
1b8430e2fc | ||
|
|
051fc134cb | ||
|
|
c9c03bed13 | ||
|
|
d710c9d27e | ||
|
|
0215e8d4a8 | ||
|
|
0f58e968b1 | ||
|
|
3dbe74c1e9 | ||
|
|
187fa08524 | ||
|
|
0677173856 | ||
|
|
e6765b7e61 | ||
|
|
3d591912c2 | ||
|
|
5efdd93789 | ||
|
|
22eb2ccdbf | ||
|
|
c3fb2a3ca1 | ||
|
|
b047fd9929 | ||
|
|
aeb096a311 | ||
|
|
42de3d9127 | ||
|
|
2659165220 | ||
|
|
fef86bcc56 | ||
|
|
70e6b54642 | ||
|
|
d4432acec3 | ||
|
|
8330f61eef | ||
|
|
9694ad0fa3 | ||
|
|
5551c594ab | ||
|
|
391a1481c6 | ||
|
|
82ee62cb14 | ||
|
|
506d87ec71 | ||
|
|
ced9ad6bba | ||
|
|
34081915d4 | ||
|
|
a2ef21b27f | ||
|
|
fea238ef15 | ||
|
|
7349a0d080 | ||
|
|
39da8118b8 | ||
|
|
625426566c | ||
|
|
ae0cc94da0 | ||
|
|
99790bae63 | ||
|
|
6b1c0e7369 | ||
|
|
cde758d324 | ||
|
|
43ebd50a42 | ||
|
|
f484f95de3 | ||
|
|
b82959118e | ||
|
|
121a6d85ff | ||
|
|
2486f0d3e0 | ||
|
|
c8447fe4f7 | ||
|
|
e8e357b8a2 | ||
|
|
5c0ee866a0 | ||
|
|
1af93e502d | ||
|
|
4e0e8dd220 | ||
|
|
9308eceb81 | ||
|
|
38578c3e50 | ||
|
|
69ccd83af3 | ||
|
|
37964e740f | ||
|
|
8e5271a6d6 | ||
|
|
d52e779131 | ||
|
|
66d8cf1233 | ||
|
|
84552a6253 | ||
|
|
9febee7abe | ||
|
|
e44f48c0c4 | ||
|
|
2f7200abdb | ||
|
|
9849a040c0 | ||
|
|
753e44ccd0 | ||
|
|
e4fab335fd | ||
|
|
c391ba7689 | ||
|
|
2b38c02165 | ||
|
|
d5d667353a | ||
|
|
026b2f2ba5 | ||
|
|
ece0ccd6df | ||
|
|
395c5862fe | ||
|
|
c62833fcf6 | ||
|
|
954f2b6353 | ||
|
|
5676ac125d | ||
|
|
7e715dd03b | ||
|
|
6fba4b7228 | ||
|
|
d32a9a37bf | ||
|
|
45cf482c74 | ||
|
|
f1ac8ba622 | ||
|
|
89c3af5207 | ||
|
|
b117431318 | ||
|
|
8df285aefb | ||
|
|
e76eda8af3 | ||
|
|
86bb36fc2f | ||
|
|
0fa31be851 | ||
|
|
aba4705b8e | ||
|
|
4fe158b2ec | ||
|
|
99fe894eda | ||
|
|
42c1618202 | ||
|
|
3d8f1290c3 | ||
|
|
baa4116697 | ||
|
|
b3a97b0889 | ||
|
|
d896996f27 | ||
|
|
dc5aa6d8df | ||
|
|
401481662f | ||
|
|
04f4f630ad | ||
|
|
3dc7d20005 | ||
|
|
f2f414a965 | ||
|
|
dd72d35fe4 | ||
|
|
96d1fcedde | ||
|
|
a1933a781e | ||
|
|
777564673e | ||
|
|
077dfdcddd | ||
|
|
4741f3737f | ||
|
|
77938c38ca | ||
|
|
d11a82a521 | ||
|
|
0c433552f9 | ||
|
|
5fa2a78e84 | ||
|
|
35a0e69cd4 | ||
|
|
2144034e1f | ||
|
|
53e6d6aa61 | ||
|
|
7303bcd91a | ||
|
|
5e31eb8ebc | ||
|
|
90fa5ffd81 | ||
|
|
099b81cb2d | ||
|
|
e5f6020582 | ||
|
|
a2759680f8 | ||
|
|
72dcb0c1f7 | ||
|
|
528ebf3ea3 | ||
|
|
3f9408bfbe | ||
|
|
65eee157b9 | ||
|
|
7683aa2e7d | ||
|
|
0da3a9bf7b | ||
|
|
eca1c83c56 | ||
|
|
42a3d2efab | ||
|
|
0168f9ff9d | ||
|
|
1ebd37a0e9 | ||
|
|
739a1c29a2 | ||
|
|
3c7521b58b | ||
|
|
c9e00d97eb | ||
|
|
0a15eca573 | ||
|
|
3118d2abd9 | ||
|
|
b71fa84af3 | ||
|
|
e9950929de | ||
|
|
63c9b8d163 | ||
|
|
7639f34e12 | ||
|
|
be60018908 | ||
|
|
d7e6523dad | ||
|
|
49fc9b5412 | ||
|
|
5198b2ee01 | ||
|
|
4aa44abf25 | ||
|
|
2a9290ce86 | ||
|
|
65924bb921 | ||
|
|
791d59020a | ||
|
|
09da6579b6 | ||
|
|
ce60f630c4 | ||
|
|
a9b5a7f006 | ||
|
|
ea133da1d8 | ||
|
|
101ed368c3 | ||
|
|
48e7e7e5c6 | ||
|
|
452d6024b0 | ||
|
|
7b7ce96c66 | ||
|
|
e508da7ff5 | ||
|
|
6b6d2ff806 | ||
|
|
5fce1afe29 | ||
|
|
69f76705fb | ||
|
|
166e95298b | ||
|
|
39486d6696 | ||
|
|
5e8aad7703 | ||
|
|
98774ecc6d | ||
|
|
8bbc5e22d1 | ||
|
|
61ebe5b9a2 | ||
|
|
c3dd741d97 | ||
|
|
f470e0d65b | ||
|
|
700efd7ee2 | ||
|
|
739e43a31e | ||
|
|
7faea8c341 | ||
|
|
3607b1d468 | ||
|
|
2436075337 | ||
|
|
77e0a76389 | ||
|
|
9736407824 | ||
|
|
b08aae63ed | ||
|
|
e6a5bb0293 | ||
|
|
afaea19726 | ||
|
|
b9326463c2 | ||
|
|
74b62bf05e | ||
|
|
ca035932b0 | ||
|
|
44d634c8fc | ||
|
|
5d2adcac19 | ||
|
|
d815c60340 | ||
|
|
9b628620e1 | ||
|
|
5391720b8b | ||
|
|
d7c33b454f | ||
|
|
9bd96a3d63 | ||
|
|
02fa679d62 | ||
|
|
eb5d350b09 | ||
|
|
4569491012 | ||
|
|
ce7dc927ae | ||
|
|
d5f3d4006a | ||
|
|
b6d3a85a8b | ||
|
|
2505410b5a | ||
|
|
c4ba7ed43e | ||
|
|
11f9750f16 | ||
|
|
9f819db14d | ||
|
|
53c967c308 | ||
|
|
341eb570e9 | ||
|
|
c8ab57f726 | ||
|
|
6b9aaf3c9a | ||
|
|
12abcddb12 | ||
|
|
d65a10c55c | ||
|
|
1654221921 | ||
|
|
107b08b6b5 | ||
|
|
fe3715c40c | ||
|
|
773b8dead2 | ||
|
|
e36e48586e | ||
|
|
187b5b03ee | ||
|
|
a5565bb509 | ||
|
|
488800b304 | ||
|
|
1d112d5663 | ||
|
|
23ef9f68ea | ||
|
|
c7d9a7fe52 | ||
|
|
5209318bb2 | ||
|
|
87300563dd | ||
|
|
3ea61c51ef | ||
|
|
99b24c107c | ||
|
|
5ea792d333 | ||
|
|
646f212d85 | ||
|
|
cc45fd5401 | ||
|
|
a2dec90edf | ||
|
|
8f1c660d1f | ||
|
|
14fe6c559f | ||
|
|
30b19c9100 | ||
|
|
dde5911b5f | ||
|
|
8b59786fbf | ||
|
|
e1b2cb106a | ||
|
|
94d74f1a09 | ||
|
|
fdc971dd03 | ||
|
|
1ce8233159 | ||
|
|
218f10bcfd | ||
|
|
68f13accd3 | ||
|
|
48907bde60 | ||
|
|
dc2dbcbc84 | ||
|
|
3a94b8a9cf | ||
|
|
8d3afa3920 | ||
|
|
d8468590e3 | ||
|
|
d256d70d92 | ||
|
|
5243f5849f | ||
|
|
9ea45b3d14 | ||
|
|
05245855eb | ||
|
|
18eabfb042 |
No files matched your search
@@ -1,5 +1,5 @@
|
||||
# 标题
|
||||
VITE_APP_TITLE=芋道管理系统
|
||||
VITE_APP_TITLE=聊天交友
|
||||
|
||||
# 项目本地运行端口号
|
||||
VITE_PORT=80
|
||||
@@ -8,18 +8,18 @@ VITE_PORT=80
|
||||
VITE_OPEN=true
|
||||
|
||||
# 租户开关
|
||||
VITE_APP_TENANT_ENABLE=true
|
||||
VITE_APP_TENANT_ENABLE=false
|
||||
|
||||
# 验证码的开关
|
||||
VITE_APP_CAPTCHA_ENABLE=true
|
||||
|
||||
# 文档地址的开关
|
||||
VITE_APP_DOCALERT_ENABLE=true
|
||||
VITE_APP_DOCALERT_ENABLE=false
|
||||
|
||||
# 百度统计
|
||||
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
|
||||
|
||||
# 默认账户密码
|
||||
VITE_APP_DEFAULT_LOGIN_TENANT = 芋道源码
|
||||
VITE_APP_DEFAULT_LOGIN_USERNAME = admin
|
||||
VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
|
||||
VITE_APP_DEFAULT_LOGIN_TENANT = 分销商城
|
||||
# VITE_APP_DEFAULT_LOGIN_USERNAME = admin
|
||||
# VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
|
||||
@@ -4,7 +4,9 @@ NODE_ENV=production
|
||||
VITE_DEV=true
|
||||
|
||||
# 请求路径
|
||||
VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
|
||||
VITE_BASE_URL='https://324e01b5211c41c7a8fc9f7854195f30.hn.takin.cc'
|
||||
|
||||
VITE_CHAT_URL='http://service.htysapp.com/#/home/chat'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
||||
@@ -1,34 +1,39 @@
|
||||
# 本地开发环境:本地启动所有项目(前端、后端、APP)时使用,不依赖外部环境
|
||||
NODE_ENV=development
|
||||
|
||||
VITE_DEV=true
|
||||
|
||||
# 请求路径
|
||||
VITE_BASE_URL='http://localhost:48080'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
||||
# 接口地址
|
||||
VITE_API_URL=/admin-api
|
||||
|
||||
# 是否删除debugger
|
||||
VITE_DROP_DEBUGGER=false
|
||||
|
||||
# 是否删除console.log
|
||||
VITE_DROP_CONSOLE=false
|
||||
|
||||
# 是否sourcemap
|
||||
VITE_SOURCEMAP=false
|
||||
|
||||
# 打包路径
|
||||
VITE_BASE_PATH=/
|
||||
|
||||
# 商城H5会员端域名
|
||||
VITE_MALL_H5_DOMAIN='http://localhost:3000'
|
||||
|
||||
# 验证码的开关
|
||||
VITE_APP_CAPTCHA_ENABLE=false
|
||||
|
||||
# GoView域名
|
||||
# 本地开发环境:本地启动所有项目(前端、后端、APP)时使用,不依赖外部环境
|
||||
NODE_ENV=development
|
||||
|
||||
VITE_DEV=true
|
||||
|
||||
# 请求路径
|
||||
# VITE_BASE_URL='http://chatapi.zianxin.com'
|
||||
|
||||
VITE_BASE_URL='http://localhost:48083'
|
||||
|
||||
# VITE_CHAT_URL='http://localhost:8080/#/home/chat'
|
||||
VITE_CHAT_URL='http://service.htysapp.com/#/home/chat'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
||||
# 接口地址
|
||||
VITE_API_URL=/admin-api
|
||||
|
||||
# 是否删除debugger
|
||||
VITE_DROP_DEBUGGER=false
|
||||
|
||||
# 是否删除console.log
|
||||
VITE_DROP_CONSOLE=false
|
||||
|
||||
# 是否sourcemap
|
||||
VITE_SOURCEMAP=false
|
||||
|
||||
# 打包路径
|
||||
VITE_BASE_PATH=/
|
||||
|
||||
# 商城H5会员端域名
|
||||
VITE_MALL_H5_DOMAIN='http://localhost:3000'
|
||||
|
||||
# 验证码的开关
|
||||
VITE_APP_CAPTCHA_ENABLE=true
|
||||
|
||||
# GoView域名
|
||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||
@@ -1,34 +1,36 @@
|
||||
# 生产环境:只在打包时使用
|
||||
NODE_ENV=production
|
||||
|
||||
VITE_DEV=false
|
||||
|
||||
# 请求路径
|
||||
VITE_BASE_URL='http://localhost:48080'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
||||
# 接口地址
|
||||
VITE_API_URL=/admin-api
|
||||
|
||||
# 是否删除debugger
|
||||
VITE_DROP_DEBUGGER=true
|
||||
|
||||
# 是否删除console.log
|
||||
VITE_DROP_CONSOLE=true
|
||||
|
||||
# 是否sourcemap
|
||||
VITE_SOURCEMAP=false
|
||||
|
||||
# 打包路径
|
||||
VITE_BASE_PATH=/
|
||||
|
||||
# 输出路径
|
||||
VITE_OUT_DIR=dist-prod
|
||||
|
||||
# 商城H5会员端域名
|
||||
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
||||
|
||||
# GoView域名
|
||||
# 生产环境:只在打包时使用
|
||||
NODE_ENV=production
|
||||
|
||||
VITE_DEV=false
|
||||
|
||||
# 请求路径
|
||||
VITE_BASE_URL='https://api.htysapp.com'
|
||||
|
||||
VITE_CHAT_URL='http://service.htysapp.com/#/home/chat'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
||||
# 接口地址
|
||||
VITE_API_URL=/admin-api
|
||||
|
||||
# 是否删除debugger
|
||||
VITE_DROP_DEBUGGER=true
|
||||
|
||||
# 是否删除console.log
|
||||
VITE_DROP_CONSOLE=true
|
||||
|
||||
# 是否sourcemap
|
||||
VITE_SOURCEMAP=false
|
||||
|
||||
# 打包路径
|
||||
VITE_BASE_PATH=/
|
||||
|
||||
# 输出路径
|
||||
VITE_OUT_DIR=dist-prod
|
||||
|
||||
# 商城H5会员端域名
|
||||
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
||||
|
||||
# GoView域名
|
||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||
@@ -1,34 +1,36 @@
|
||||
# 预发布环境:只在打包时使用
|
||||
NODE_ENV=production
|
||||
|
||||
VITE_DEV=false
|
||||
|
||||
# 请求路径
|
||||
VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
||||
# 接口地址
|
||||
VITE_API_URL=/admin-api
|
||||
|
||||
# 是否删除debugger
|
||||
VITE_DROP_DEBUGGER=true
|
||||
|
||||
# 是否删除console.log
|
||||
VITE_DROP_CONSOLE=true
|
||||
|
||||
# 是否sourcemap
|
||||
VITE_SOURCEMAP=false
|
||||
|
||||
# 打包路径
|
||||
VITE_BASE_PATH='http://static-vue3.yudao.iocoder.cn/'
|
||||
|
||||
# 输出路径
|
||||
VITE_OUT_DIR=dist-stage
|
||||
|
||||
# 商城H5会员端域名
|
||||
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
||||
|
||||
# GoView域名
|
||||
# 预发布环境:只在打包时使用
|
||||
NODE_ENV=production
|
||||
|
||||
VITE_DEV=false
|
||||
|
||||
# 请求路径
|
||||
VITE_BASE_URL='https://yffzpapi.zianxin.com'
|
||||
|
||||
VITE_CHAT_URL='http://localhost:8080/#/home/chat'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
||||
# 接口地址
|
||||
VITE_API_URL=/admin-api
|
||||
|
||||
# 是否删除debugger
|
||||
VITE_DROP_DEBUGGER=true
|
||||
|
||||
# 是否删除console.log
|
||||
VITE_DROP_CONSOLE=true
|
||||
|
||||
# 是否sourcemap
|
||||
VITE_SOURCEMAP=false
|
||||
|
||||
# 打包路径
|
||||
VITE_BASE_PATH='http://static-vue3.yudao.iocoder.cn/'
|
||||
|
||||
# 输出路径
|
||||
VITE_OUT_DIR=dist-stage
|
||||
|
||||
# 商城H5会员端域名
|
||||
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
||||
|
||||
# GoView域名
|
||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||
@@ -6,6 +6,8 @@ VITE_DEV=false
|
||||
# 请求路径
|
||||
VITE_BASE_URL='http://localhost:48080'
|
||||
|
||||
VITE_CHAT_URL='http://localhost:8080/#/home/chat'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 25 KiB |
@@ -62,7 +62,7 @@
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
|
||||
"editor.defaultFormatter": "vscode.typescript-language-features"
|
||||
},
|
||||
"[typescriptreact]": {
|
||||
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
|
||||
@@ -87,7 +87,7 @@
|
||||
"source.fixAll.stylelint": "explicit"
|
||||
},
|
||||
"[vue]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
"editor.defaultFormatter": "Vue.volar"
|
||||
},
|
||||
"i18n-ally.localesPaths": ["src/locales"],
|
||||
"i18n-ally.keystyle": "nested",
|
||||
|
||||
@@ -81,16 +81,13 @@
|
||||
|
||||
系统内置多种多种业务功能,可以用于快速你的业务系统:
|
||||
|
||||
* 系统功能
|
||||
* 基础设施
|
||||
* 工作流程
|
||||
* 支付系统
|
||||
* 会员中心
|
||||
* 数据报表
|
||||
* 商城系统
|
||||
* 微信公众号
|
||||
* ERP 系统
|
||||
* CRM 系统
|
||||
系统内置多种多种业务功能,可以用于快速你的业务系统:
|
||||
|
||||

|
||||
|
||||
* 通用模块(必选):系统功能、基础设施
|
||||
* 通用模块(可选):工作流程、支付系统、数据报表、会员中心
|
||||
* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型
|
||||
|
||||
### 系统功能
|
||||
|
||||
@@ -120,54 +117,77 @@
|
||||
|
||||
### 工作流程
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|----|-------|-----------------------------------------|
|
||||
| 🚀 | 流程模型 | 配置工作流的流程模型,支持 BPMN 和仿钉钉/飞书设计器 |
|
||||
| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 |
|
||||
| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 |
|
||||
| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 |
|
||||
| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转派、委派、退回、加减签等操作 |
|
||||
| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,支持流程预测,展示未来审批人信息 |
|
||||
| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 |
|
||||
|
||||

|
||||
|
||||
基于 Flowable 构建,可支持信创(国产)数据库,满足中国特色流程操作:
|
||||
|
||||
| BPMN 设计器 | 钉钉/飞书设计器 |
|
||||
|------------------------------|--------------------------------|
|
||||
|  |  |
|
||||
|
||||
> 历经头部企业生产验证,工作流引擎须标配仿钉钉/飞书 + BPMN 双设计器!!!
|
||||
>
|
||||
> 前者支持轻量配置简单流程,后者实现复杂场景深度编排
|
||||
|
||||
| 功能列表 | 功能描述 | 是否完成 |
|
||||
|------------|-------------------------------------------------------------------------------------|------|
|
||||
| SIMPLE 设计器 | 仿钉钉/飞书设计器,支持拖拽搭建表单流程,10 分钟快速完成审批流程配置 | ✅ |
|
||||
| BPMN 设计器 | 基于 BPMN 标准开发,适配复杂业务场景,满足多层级审批及流程自动化需求 | ✅ |
|
||||
| 会签 | 同一个审批节点设置多个人(如 A、B、C 三人,三人会同时收到待办任务),需全部同意之后,审批才可到下一审批节点 | ✅ |
|
||||
| 或签 | 同一个审批节点设置多个人,任意一个人处理后,就能进入下一个节点 | ✅ |
|
||||
| 依次审批 | (顺序会签)同一个审批节点设置多个人(如 A、B、C 三人),三人按顺序依次收到待办,即 A 先审批,A 提交后 B 才能审批,需全部同意之后,审批才可到下一审批节点 | ✅ |
|
||||
| 抄送 | 将审批结果通知给抄送人,同一个审批默认排重,不重复抄送给同一人 | ✅ |
|
||||
| 驳回 | (退回)将审批重置发送给某节点,重新审批。可驳回至发起人、上一节点、任意节点 | ✅ |
|
||||
| 转办 | A 转给其 B 审批,B 审批后,进入下一节点 | ✅ |
|
||||
| 委派 | A 转给其 B 审批,B 审批后,转给 A,A 继续审批后进入下一节点 | ✅ |
|
||||
| 加签 | 允许当前审批人根据需要,自行增加当前节点的审批人,支持向前、向后加签 | ✅ |
|
||||
| 减签 | (取消加签)在当前审批人操作之前,减少审批人 | ✅ |
|
||||
| 撤销 | (取消流程)流程发起人,可以对流程进行撤销处理 | ✅ |
|
||||
| 终止 | 系统管理员,在任意节点终止流程实例 | ✅ |
|
||||
| 表单权限 | 支持拖拉拽配置表单,每个审批节点可配置只读、编辑、隐藏权限 | ✅ |
|
||||
| 超时审批 | 配置超时审批时间,超时后自动触发审批通过、不通过、驳回等操作 | ✅ |
|
||||
| 自动提醒 | 配置提醒时间,到达时间后自动触发短信、邮箱、站内信等通知提醒,支持自定义重复提醒频次 | ✅ |
|
||||
| 父子流程 | 主流程设置子流程节点,子流程节点会自动触发子流程。子流程结束后,主流程才会执行(继续往下下执行),支持同步子流程、异步子流程 | ✅ |
|
||||
| 条件分支 | (排它分支)用于在流程中实现决策,即根据条件选择一个分支执行 | ✅ |
|
||||
| 并行分支 | 允许将流程分成多条分支,不进行条件判断,所有分支都会执行 | ✅ |
|
||||
| 包容分支 | (条件分支 + 并行分支的结合体)允许基于条件选择多条分支执行,但如果没有任何一个分支满足条件,则可以选择默认分支 | ✅ |
|
||||
| 路由分支 | 根据条件选择一个分支执行(重定向到指定配置节点),也可以选择默认分支执行(继续往下执行) | ✅ |
|
||||
| 触发节点 | 执行到该节点,触发 HTTP 请求、HTTP 回调、更新数据、删除数据等 | ✅ |
|
||||
| 延迟节点 | 执行到该节点,审批等待一段时间再执行,支持固定时长、固定日期等 | ✅ |
|
||||
| 拓展设置 | 流程前置/后置通知,节点(任务)前置、后置通知,流程报表,自动审批去重,自定流程编号、标题、摘要,流程报表等 | ✅ |
|
||||
|
||||
### 支付系统
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|-----|------|---------------------------|
|
||||
| 🚀 | 商户信息 | 管理商户信息,支持 Saas 场景下的多商户功能 |
|
||||
| 🚀 | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 |
|
||||
| 🚀 | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单 |
|
||||
| 🚀 | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单 |
|
||||
|
||||
ps:核心功能已经实现,正在对接微信小程序中...
|
||||
| 🚀 | 回调通知 | 查看支付回调业务的【支付】【退款】的通知结果 |
|
||||
| 🚀 | 接入示例 | 提供接入支付系统的【支付】【退款】的功能实战 |
|
||||
|
||||
### 基础设施
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|----|----------|----------------------------------------------|
|
||||
| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 |
|
||||
| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |
|
||||
| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |
|
||||
| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |
|
||||
| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
|
||||
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
|
||||
| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 |
|
||||
| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
|
||||
| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |
|
||||
| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
|
||||
| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 |
|
||||
| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |
|
||||
| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 |
|
||||
| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 |
|
||||
| 🚀 | 服务保障 | 基于 Redis 实现分布式锁、幂等、限流功能,满足高并发场景 |
|
||||
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
|
||||
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
|
||||
| | 功能 | 描述 |
|
||||
|-----|-----------|----------------------------------------------|
|
||||
| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 |
|
||||
| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |
|
||||
| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |
|
||||
| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |
|
||||
| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
|
||||
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
|
||||
| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 |
|
||||
| 🚀 | WebSocket | 提供 WebSocket 接入示例,支持一对一、一对多发送方式 |
|
||||
| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
|
||||
| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |
|
||||
| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
|
||||
| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 |
|
||||
| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |
|
||||
| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 |
|
||||
| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 |
|
||||
| 🚀 | 服务保障 | 基于 Redis 实现分布式锁、幂等、限流功能,满足高并发场景 |
|
||||
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
|
||||
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
|
||||
|
||||

|
||||
|
||||
@@ -213,6 +233,14 @@ ps:核心功能已经实现,正在对接微信小程序中...
|
||||
|
||||

|
||||
|
||||
### AI 大模型
|
||||
|
||||
演示地址:<https://doc.iocoder.cn/ai-preview/>
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 🐷 演示图
|
||||
|
||||
### 系统功能
|
||||
|
||||
@@ -16,7 +16,7 @@ import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
|
||||
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
|
||||
import UnoCSS from 'unocss/vite'
|
||||
|
||||
export function createVitePlugins() {
|
||||
export function createVitePlugins(isBuild = false) {
|
||||
const root = process.cwd()
|
||||
|
||||
// 路径查找
|
||||
@@ -24,7 +24,7 @@ export function createVitePlugins() {
|
||||
return resolve(root, '.', dir)
|
||||
}
|
||||
|
||||
return [
|
||||
const plugins = [
|
||||
Vue(),
|
||||
VueJsx(),
|
||||
UnoCSS(),
|
||||
@@ -66,10 +66,7 @@ export function createVitePlugins() {
|
||||
resolvers: [ElementPlusResolver()],
|
||||
globs: ["src/components/**/**.{vue, md}", '!src/components/DiyEditor/components/mobile/**']
|
||||
}),
|
||||
EslintPlugin({
|
||||
cache: false,
|
||||
include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
|
||||
}),
|
||||
// 关闭 ESLint 插件,避免 vendor 依赖缺失导致 dev/build 失败
|
||||
VueI18nPlugin({
|
||||
runtimeOnly: true,
|
||||
compositionOnly: true,
|
||||
@@ -88,13 +85,22 @@ export function createVitePlugins() {
|
||||
ext: '.gz', // 生成的压缩包后缀
|
||||
deleteOriginFile: false //压缩后是否删除源文件
|
||||
}),
|
||||
ViteEjsPlugin(),
|
||||
topLevelAwait({
|
||||
// https://juejin.cn/post/7152191742513512485
|
||||
// The export name of top-level await promise for each chunk module
|
||||
promiseExportName: '__tla',
|
||||
// The function to generate import names of top-level await promise in each chunk module
|
||||
promiseImportName: (i) => `__tla_${i}`
|
||||
})
|
||||
ViteEjsPlugin()
|
||||
]
|
||||
|
||||
// 生产构建跳过:与当前 @swc/core 不兼容会报 missing field `type`
|
||||
// build.target 使用 es2022 已原生支持 top-level await
|
||||
if (!isBuild) {
|
||||
plugins.push(
|
||||
topLevelAwait({
|
||||
// https://juejin.cn/post/7152191742513512485
|
||||
// The export name of top-level await promise for each chunk module
|
||||
promiseExportName: '__tla',
|
||||
// The function to generate import names of top-level await promise in each chunk module
|
||||
promiseImportName: (i) => `__tla_${i}`
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
return plugins
|
||||
}
|
||||
@@ -114,7 +114,8 @@ const include = [
|
||||
'element-plus/es/components/segmented/style/css',
|
||||
'@element-plus/icons-vue',
|
||||
'element-plus/es/components/footer/style/css',
|
||||
'element-plus/es/components/empty/style/css'
|
||||
'element-plus/es/components/empty/style/css',
|
||||
'element-plus/es/components/mention/style/css'
|
||||
]
|
||||
|
||||
const exclude = ['@iconify/json']
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "yudao-ui-admin-vue3",
|
||||
"version": "2.4.0-snapshot",
|
||||
"version": "2.4.1-snapshot",
|
||||
"description": "基于vue3、vite4、element-plus、typesScript",
|
||||
"author": "xingyu",
|
||||
"private": false,
|
||||
@@ -38,8 +38,9 @@
|
||||
"animate.css": "^4.1.1",
|
||||
"axios": "^1.6.8",
|
||||
"benz-amr-recorder": "^1.1.5",
|
||||
"bpmn-js-token-simulation": "^0.10.0",
|
||||
"bpmn-js-token-simulation": "^0.36.0",
|
||||
"camunda-bpmn-moddle": "^7.0.1",
|
||||
"compressorjs": "^1.2.1",
|
||||
"cropperjs": "^1.6.1",
|
||||
"crypto-js": "^4.2.0",
|
||||
"dayjs": "^1.11.10",
|
||||
@@ -47,10 +48,13 @@
|
||||
"driver.js": "^1.3.1",
|
||||
"echarts": "^5.5.0",
|
||||
"echarts-wordcloud": "^2.1.0",
|
||||
"element-plus": "2.8.4",
|
||||
"element-plus": "2.9.1",
|
||||
"fast-diff": "^1.3.0",
|
||||
"fast-xml-parser": "^4.3.2",
|
||||
"highlight.js": "^11.9.0",
|
||||
"is-core-module": "^2.16.2",
|
||||
"jsencrypt": "^3.3.2",
|
||||
"localforage": "^1.10.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markmap-common": "^0.16.0",
|
||||
@@ -59,20 +63,25 @@
|
||||
"markmap-view": "^0.16.0",
|
||||
"min-dash": "^4.1.1",
|
||||
"mitt": "^3.0.1",
|
||||
"node-forge": "^1.4.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"path-parse": "^1.0.7",
|
||||
"pinia": "^2.1.7",
|
||||
"pinia-plugin-persistedstate": "^3.2.1",
|
||||
"qrcode": "^1.5.3",
|
||||
"qs": "^6.12.0",
|
||||
"sortablejs": "^1.15.3",
|
||||
"steady-xml": "^0.1.0",
|
||||
"supports-preserve-symlinks-flag": "^1.0.0",
|
||||
"url": "^0.11.3",
|
||||
"v3-jsoneditor": "^0.0.6",
|
||||
"video.js": "^7.21.5",
|
||||
"vue": "3.5.12",
|
||||
"vue-dompurify-html": "^4.1.4",
|
||||
"vue-i18n": "9.10.2",
|
||||
"vue-router": "4.4.5",
|
||||
"vue-types": "^5.1.1",
|
||||
"vue3-signature": "^0.2.4",
|
||||
"vuedraggable": "^4.1.0",
|
||||
"web-storage-cache": "^1.1.1",
|
||||
"xml-js": "^1.6.11"
|
||||
@@ -91,6 +100,7 @@
|
||||
"@typescript-eslint/eslint-plugin": "^7.1.0",
|
||||
"@typescript-eslint/parser": "^7.1.0",
|
||||
"@unocss/eslint-config": "^0.57.4",
|
||||
"@unocss/eslint-plugin": "66.1.0-beta.5",
|
||||
"@unocss/transformer-variant-group": "^0.58.5",
|
||||
"@vitejs/plugin-legacy": "^5.3.1",
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
@@ -124,7 +134,7 @@
|
||||
"unplugin-auto-import": "^0.16.7",
|
||||
"unplugin-element-plus": "^0.8.0",
|
||||
"unplugin-vue-components": "^0.25.2",
|
||||
"vite": "5.1.4",
|
||||
"vite": "^5.1.4",
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"vite-plugin-ejs": "^1.7.0",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
@@ -148,5 +158,28 @@
|
||||
"engines": {
|
||||
"node": ">= 16.0.0",
|
||||
"pnpm": ">=8.6.0"
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
"strnum": "file:vendor/strnum",
|
||||
"prettier-linter-helpers": "file:vendor/prettier-linter-helpers",
|
||||
"resolve": "file:vendor/resolve",
|
||||
"javascript-natural-sort": "file:vendor/javascript-natural-sort",
|
||||
"iconv-lite": "file:vendor/iconv-lite"
|
||||
},
|
||||
"packageExtensions": {
|
||||
"bpmn-js-token-simulation@0.36.3": {
|
||||
"dependencies": {
|
||||
"ids": "1.0.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"overrides": {
|
||||
"strnum": "file:vendor/strnum",
|
||||
"prettier-linter-helpers": "file:vendor/prettier-linter-helpers",
|
||||
"resolve": "file:vendor/resolve",
|
||||
"javascript-natural-sort": "file:vendor/javascript-natural-sort",
|
||||
"iconv-lite": "file:vendor/iconv-lite"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
# 在系统自带「终端」里运行本脚本(不要用 Cursor Agent 终端),可避免 .vscode/.idea 目录被拦截导致安装失败。
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
|
||||
if [ -s "$NVM_DIR/nvm.sh" ]; then
|
||||
# shellcheck disable=SC1090
|
||||
. "$NVM_DIR/nvm.sh"
|
||||
nvm use 20 >/dev/null || nvm use default >/dev/null || true
|
||||
fi
|
||||
|
||||
echo "==> Node: $(node -v)"
|
||||
echo "==> npm: $(npm -v)"
|
||||
|
||||
if ! command -v pnpm >/dev/null 2>&1; then
|
||||
echo "==> 安装 pnpm..."
|
||||
npm install -g pnpm@9 --registry=https://registry.npmjs.org/
|
||||
fi
|
||||
echo "==> pnpm: $(pnpm -v)"
|
||||
|
||||
cat > .npmrc <<'EOF'
|
||||
registry=https://registry.npmjs.org/
|
||||
node-linker=hoisted
|
||||
shamefully-hoist=true
|
||||
EOF
|
||||
|
||||
echo "==> 清理旧依赖..."
|
||||
rm -rf node_modules
|
||||
|
||||
echo "==> 安装依赖(约需几分钟)..."
|
||||
pnpm install --registry=https://registry.npmjs.org/
|
||||
|
||||
# 兜底:补齐 rollup 原生可选依赖(npm optional 偶发缺失)
|
||||
ARCH="$(uname -m)"
|
||||
if [ "$ARCH" = "x86_64" ]; then
|
||||
pnpm add -D @rollup/rollup-darwin-x64 --registry=https://registry.npmjs.org/ || true
|
||||
elif [ "$ARCH" = "arm64" ]; then
|
||||
pnpm add -D @rollup/rollup-darwin-arm64 --registry=https://registry.npmjs.org/ || true
|
||||
fi
|
||||
|
||||
if [ ! -x node_modules/.bin/vite ] && [ ! -f node_modules/vite/bin/vite.js ]; then
|
||||
echo "ERROR: vite 仍未安装成功,请把上方报错发我"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> 启动开发服务(连接远程后端 .env.dev)..."
|
||||
# 端口 80 可能需要权限,改用 5173
|
||||
export VITE_PORT=5173
|
||||
pnpm exec vite --mode dev --port 5173 --host 0.0.0.0
|
||||
@@ -14,9 +14,16 @@ export interface ChatMessageVO {
|
||||
modelId: number // 模型编号
|
||||
content: string // 聊天内容
|
||||
tokens: number // 消耗 Token 数量
|
||||
segmentIds?: number[] // 段落编号
|
||||
segments?: {
|
||||
id: number // 段落编号
|
||||
content: string // 段落内容
|
||||
documentId: number // 文档编号
|
||||
documentName: string // 文档名称
|
||||
}[]
|
||||
createTime: Date // 创建时间
|
||||
roleAvatar: string // 角色头像
|
||||
userAvatar: string // 创建时间
|
||||
userAvatar: string // 用户头像
|
||||
}
|
||||
|
||||
// AI chat 聊天
|
||||
|
||||
@@ -20,9 +20,8 @@ export interface ImageVO {
|
||||
}
|
||||
|
||||
export interface ImageDrawReqVO {
|
||||
platform: string // 平台
|
||||
prompt: string // 提示词
|
||||
model: string // 模型
|
||||
modelId: number // 模型
|
||||
style: string // 图像生成的风格
|
||||
width: string // 图片宽度
|
||||
height: string // 图片高度
|
||||
@@ -31,7 +30,7 @@ export interface ImageDrawReqVO {
|
||||
|
||||
export interface ImageMidjourneyImagineReqVO {
|
||||
prompt: string // 提示词
|
||||
model: string // 模型 mj nijj
|
||||
modelId: number // 模型
|
||||
base64Array: string[] // size不能为空
|
||||
width: string // 图片宽度
|
||||
height: string // 图片高度
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// AI 知识库文档 VO
|
||||
export interface KnowledgeDocumentVO {
|
||||
id: number // 编号
|
||||
knowledgeId: number // 知识库编号
|
||||
name: string // 文档名称
|
||||
contentLength: number // 字符数
|
||||
tokens: number // token 数
|
||||
segmentMaxTokens: number // 分片最大 token 数
|
||||
retrievalCount: number // 召回次数
|
||||
status: number // 是否启用
|
||||
}
|
||||
|
||||
// AI 知识库文档 API
|
||||
export const KnowledgeDocumentApi = {
|
||||
// 查询知识库文档分页
|
||||
getKnowledgeDocumentPage: async (params: any) => {
|
||||
return await request.get({ url: `/ai/knowledge/document/page`, params })
|
||||
},
|
||||
|
||||
// 查询知识库文档详情
|
||||
getKnowledgeDocument: async (id: number) => {
|
||||
return await request.get({ url: `/ai/knowledge/document/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增知识库文档(单个)
|
||||
createKnowledgeDocument: async (data: any) => {
|
||||
return await request.post({ url: `/ai/knowledge/document/create`, data })
|
||||
},
|
||||
|
||||
// 新增知识库文档(多个)
|
||||
createKnowledgeDocumentList: async (data: any) => {
|
||||
return await request.post({ url: `/ai/knowledge/document/create-list`, data })
|
||||
},
|
||||
|
||||
// 修改知识库文档
|
||||
updateKnowledgeDocument: async (data: any) => {
|
||||
return await request.put({ url: `/ai/knowledge/document/update`, data })
|
||||
},
|
||||
|
||||
// 修改知识库文档状态
|
||||
updateKnowledgeDocumentStatus: async (data: any) => {
|
||||
return await request.put({
|
||||
url: `/ai/knowledge/document/update-status`,
|
||||
data
|
||||
})
|
||||
},
|
||||
|
||||
// 删除知识库文档
|
||||
deleteKnowledgeDocument: async (id: number) => {
|
||||
return await request.delete({ url: `/ai/knowledge/document/delete?id=` + id })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// AI 知识库 VO
|
||||
export interface KnowledgeVO {
|
||||
id: number // 编号
|
||||
name: string // 知识库名称
|
||||
description: string // 知识库描述
|
||||
embeddingModelId: number // 嵌入模型编号,高质量模式时维护
|
||||
topK: number // topK
|
||||
similarityThreshold: number // 相似度阈值
|
||||
}
|
||||
|
||||
// AI 知识库 API
|
||||
export const KnowledgeApi = {
|
||||
// 查询知识库分页
|
||||
getKnowledgePage: async (params: any) => {
|
||||
return await request.get({ url: `/ai/knowledge/page`, params })
|
||||
},
|
||||
|
||||
// 查询知识库详情
|
||||
getKnowledge: async (id: number) => {
|
||||
return await request.get({ url: `/ai/knowledge/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增知识库
|
||||
createKnowledge: async (data: KnowledgeVO) => {
|
||||
return await request.post({ url: `/ai/knowledge/create`, data })
|
||||
},
|
||||
|
||||
// 修改知识库
|
||||
updateKnowledge: async (data: KnowledgeVO) => {
|
||||
return await request.put({ url: `/ai/knowledge/update`, data })
|
||||
},
|
||||
|
||||
// 删除知识库
|
||||
deleteKnowledge: async (id: number) => {
|
||||
return await request.delete({ url: `/ai/knowledge/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 获取知识库简单列表
|
||||
getSimpleKnowledgeList: async () => {
|
||||
return await request.get({ url: `/ai/knowledge/simple-list` })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// AI 知识库分段 VO
|
||||
export interface KnowledgeSegmentVO {
|
||||
id: number // 编号
|
||||
documentId: number // 文档编号
|
||||
knowledgeId: number // 知识库编号
|
||||
vectorId: string // 向量库编号
|
||||
content: string // 切片内容
|
||||
contentLength: number // 切片内容长度
|
||||
tokens: number // token 数量
|
||||
retrievalCount: number // 召回次数
|
||||
status: number // 文档状态
|
||||
createTime: number // 创建时间
|
||||
}
|
||||
|
||||
// AI 知识库分段 API
|
||||
export const KnowledgeSegmentApi = {
|
||||
// 查询知识库分段分页
|
||||
getKnowledgeSegmentPage: async (params: any) => {
|
||||
return await request.get({ url: `/ai/knowledge/segment/page`, params })
|
||||
},
|
||||
|
||||
// 查询知识库分段详情
|
||||
getKnowledgeSegment: async (id: number) => {
|
||||
return await request.get({ url: `/ai/knowledge/segment/get?id=` + id })
|
||||
},
|
||||
|
||||
// 删除知识库分段
|
||||
deleteKnowledgeSegment: async (id: number) => {
|
||||
return await request.delete({ url: `/ai/knowledge/segment/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 新增知识库分段
|
||||
createKnowledgeSegment: async (data: KnowledgeSegmentVO) => {
|
||||
return await request.post({ url: `/ai/knowledge/segment/create`, data })
|
||||
},
|
||||
|
||||
// 修改知识库分段
|
||||
updateKnowledgeSegment: async (data: KnowledgeSegmentVO) => {
|
||||
return await request.put({ url: `/ai/knowledge/segment/update`, data })
|
||||
},
|
||||
|
||||
// 修改知识库分段状态
|
||||
updateKnowledgeSegmentStatus: async (data: any) => {
|
||||
return await request.put({
|
||||
url: `/ai/knowledge/segment/update-status`,
|
||||
data
|
||||
})
|
||||
},
|
||||
|
||||
// 切片内容
|
||||
splitContent: async (url: string, segmentMaxTokens: number) => {
|
||||
return await request.get({
|
||||
url: `/ai/knowledge/segment/split`,
|
||||
params: { url, segmentMaxTokens }
|
||||
})
|
||||
},
|
||||
|
||||
// 获取文档处理列表
|
||||
getKnowledgeSegmentProcessList: async (documentIds: number[]) => {
|
||||
return await request.get({
|
||||
url: `/ai/knowledge/segment/get-process-list`,
|
||||
params: { documentIds: documentIds.join(',') }
|
||||
})
|
||||
},
|
||||
|
||||
// 搜索知识库分段
|
||||
searchKnowledgeSegment: async (params: any) => {
|
||||
return await request.get({
|
||||
url: `/ai/knowledge/segment/search`,
|
||||
params
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// AI 聊天模型 VO
|
||||
export interface ChatModelVO {
|
||||
id: number // 编号
|
||||
keyId: number // API 秘钥编号
|
||||
name: string // 模型名字
|
||||
model: string // 模型标识
|
||||
platform: string // 模型平台
|
||||
sort: number // 排序
|
||||
status: number // 状态
|
||||
temperature: number // 温度参数
|
||||
maxTokens: number // 单条回复的最大 Token 数量
|
||||
maxContexts: number // 上下文的最大 Message 数量
|
||||
}
|
||||
|
||||
// AI 聊天模型 API
|
||||
export const ChatModelApi = {
|
||||
// 查询聊天模型分页
|
||||
getChatModelPage: async (params: any) => {
|
||||
return await request.get({ url: `/ai/chat-model/page`, params })
|
||||
},
|
||||
|
||||
// 获得聊天模型列表
|
||||
getChatModelSimpleList: async (status?: number) => {
|
||||
return await request.get({
|
||||
url: `/ai/chat-model/simple-list`,
|
||||
params: {
|
||||
status
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 查询聊天模型详情
|
||||
getChatModel: async (id: number) => {
|
||||
return await request.get({ url: `/ai/chat-model/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增聊天模型
|
||||
createChatModel: async (data: ChatModelVO) => {
|
||||
return await request.post({ url: `/ai/chat-model/create`, data })
|
||||
},
|
||||
|
||||
// 修改聊天模型
|
||||
updateChatModel: async (data: ChatModelVO) => {
|
||||
return await request.put({ url: `/ai/chat-model/update`, data })
|
||||
},
|
||||
|
||||
// 删除聊天模型
|
||||
deleteChatModel: async (id: number) => {
|
||||
return await request.delete({ url: `/ai/chat-model/delete?id=` + id })
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,8 @@ export interface ChatRoleVO {
|
||||
welcomeMessage: string // 角色设定
|
||||
publicStatus: boolean // 是否公开
|
||||
status: number // 状态
|
||||
knowledgeIds?: number[] // 引用的知识库 ID 列表
|
||||
toolIds?: number[] // 引用的工具 ID 列表
|
||||
}
|
||||
|
||||
// AI 聊天角色 分页请求 vo
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// AI 模型 VO
|
||||
export interface ModelVO {
|
||||
id: number // 编号
|
||||
keyId: number // API 秘钥编号
|
||||
name: string // 模型名字
|
||||
model: string // 模型标识
|
||||
platform: string // 模型平台
|
||||
type: number // 模型类型
|
||||
sort: number // 排序
|
||||
status: number // 状态
|
||||
temperature?: number // 温度参数
|
||||
maxTokens?: number // 单条回复的最大 Token 数量
|
||||
maxContexts?: number // 上下文的最大 Message 数量
|
||||
}
|
||||
|
||||
// AI 模型 API
|
||||
export const ModelApi = {
|
||||
// 查询模型分页
|
||||
getModelPage: async (params: any) => {
|
||||
return await request.get({ url: `/ai/model/page`, params })
|
||||
},
|
||||
|
||||
// 获得模型列表
|
||||
getModelSimpleList: async (type?: number) => {
|
||||
return await request.get({
|
||||
url: `/ai/model/simple-list`,
|
||||
params: {
|
||||
type
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 查询模型详情
|
||||
getModel: async (id: number) => {
|
||||
return await request.get({ url: `/ai/model/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增模型
|
||||
createModel: async (data: ModelVO) => {
|
||||
return await request.post({ url: `/ai/model/create`, data })
|
||||
},
|
||||
|
||||
// 修改模型
|
||||
updateModel: async (data: ModelVO) => {
|
||||
return await request.put({ url: `/ai/model/update`, data })
|
||||
},
|
||||
|
||||
// 删除模型
|
||||
deleteModel: async (id: number) => {
|
||||
return await request.delete({ url: `/ai/model/delete?id=` + id })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// AI 工具 VO
|
||||
export interface ToolVO {
|
||||
id: number // 工具编号
|
||||
name: string // 工具名称
|
||||
description: string // 工具描述
|
||||
status: number // 状态
|
||||
}
|
||||
|
||||
// AI 工具 API
|
||||
export const ToolApi = {
|
||||
// 查询工具分页
|
||||
getToolPage: async (params: any) => {
|
||||
return await request.get({ url: `/ai/tool/page`, params })
|
||||
},
|
||||
|
||||
// 查询工具详情
|
||||
getTool: async (id: number) => {
|
||||
return await request.get({ url: `/ai/tool/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增工具
|
||||
createTool: async (data: ToolVO) => {
|
||||
return await request.post({ url: `/ai/tool/create`, data })
|
||||
},
|
||||
|
||||
// 修改工具
|
||||
updateTool: async (data: ToolVO) => {
|
||||
return await request.put({ url: `/ai/tool/update`, data })
|
||||
},
|
||||
|
||||
// 删除工具
|
||||
deleteTool: async (id: number) => {
|
||||
return await request.delete({ url: `/ai/tool/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 获取工具简单列表
|
||||
getToolSimpleList: async () => {
|
||||
return await request.get({ url: `/ai/tool/simple-list` })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export const getWorkflowPage = async (params) => {
|
||||
return await request.get({ url: '/ai/workflow/page', params })
|
||||
}
|
||||
|
||||
export const getWorkflow = async (id) => {
|
||||
return await request.get({ url: '/ai/workflow/get?id=' + id })
|
||||
}
|
||||
|
||||
export const createWorkflow = async (data) => {
|
||||
return await request.post({ url: '/ai/workflow/create', data })
|
||||
}
|
||||
|
||||
export const updateWorkflow = async (data) => {
|
||||
return await request.put({ url: '/ai/workflow/update', data })
|
||||
}
|
||||
|
||||
export const deleteWorkflow = async (id) => {
|
||||
return await request.delete({ url: '/ai/workflow/delete?id=' + id })
|
||||
}
|
||||
|
||||
export const updateWorkflowModel = async (data) => {
|
||||
return await request.put({ url: '/ai/workflow/updateWorkflowModel', data })
|
||||
}
|
||||
@@ -20,3 +20,9 @@ export const getProcessDefinitionList = async (params) => {
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
export const getSimpleProcessDefinitionList = async () => {
|
||||
return await request.get({
|
||||
url: '/bpm/process-definition/simple-list'
|
||||
})
|
||||
}
|
||||
@@ -72,3 +72,7 @@ export const deleteModel = async (id: number) => {
|
||||
export const deployModel = async (id: number) => {
|
||||
return await request.post({ url: '/bpm/model/deploy?id=' + id })
|
||||
}
|
||||
|
||||
export const cleanModel = async (id: number) => {
|
||||
return await request.delete({ url: '/bpm/model/clean?id=' + id })
|
||||
}
|
||||
@@ -36,6 +36,7 @@ export type ApprovalTaskInfo = {
|
||||
assigneeUser: User
|
||||
status: number
|
||||
reason: string
|
||||
signPicUrl: string
|
||||
}
|
||||
|
||||
// 审批节点信息
|
||||
@@ -89,7 +90,12 @@ export const getProcessInstanceCopyPage = async (params: any) => {
|
||||
|
||||
// 获取审批详情
|
||||
export const getApprovalDetail = async (params: any) => {
|
||||
return await request.get({ url: 'bpm/process-instance/get-approval-detail' , params })
|
||||
return await request.get({ url: '/bpm/process-instance/get-approval-detail', params })
|
||||
}
|
||||
|
||||
// 获取下一个执行的流程节点
|
||||
export const getNextApprovalNodes = async (params: any) => {
|
||||
return await request.get({ url: '/bpm/process-instance/get-next-approval-nodes', params })
|
||||
}
|
||||
|
||||
// 获取表单字段权限
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询用户详情
|
||||
export const self = async (params: any) => {
|
||||
return await request.get({
|
||||
url: '/user/self',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 判断用户哪个终端在线
|
||||
export const terminalOnline = async (params: any) => {
|
||||
return await request.get({
|
||||
url: '/user/terminal/online',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 朋友列表
|
||||
export const friendList = async (params: any) => {
|
||||
return await request.get({
|
||||
url: '/friend/list',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 群列表
|
||||
export const groupList = async (params: any) => {
|
||||
return await request.get({
|
||||
url: '/group/list',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 开启/关闭免打扰状态
|
||||
export const friendDnd = async (data: any) => {
|
||||
return await request.put({
|
||||
url: '/friend/dnd',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 开启/关闭群免打扰状态
|
||||
export const groupDnd = async (data: any) => {
|
||||
return await request.put({
|
||||
url: '/group/dnd',
|
||||
data
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export type ChatUserId = number | string
|
||||
|
||||
export interface ConversationUser {
|
||||
id: ChatUserId
|
||||
nickname?: string
|
||||
username?: string
|
||||
avatar?: string
|
||||
}
|
||||
|
||||
export interface PrivateMessage {
|
||||
id: ChatUserId
|
||||
sendId: ChatUserId
|
||||
recvId: ChatUserId
|
||||
sendUserName?: string
|
||||
recvUserName?: string
|
||||
content?: string | null
|
||||
type: number
|
||||
status: number
|
||||
sendTime: string | number
|
||||
}
|
||||
|
||||
export interface ChatConversation {
|
||||
userA: ConversationUser
|
||||
userB: ConversationUser
|
||||
messageCount: number
|
||||
lastMessage: PrivateMessage
|
||||
}
|
||||
|
||||
export interface ConversationPageRequest {
|
||||
pageNum: number
|
||||
pageSize: number
|
||||
userKeyword?: string
|
||||
peerKeyword?: string
|
||||
lastSendTimeList?: [number, number]
|
||||
}
|
||||
|
||||
export interface PrivateMessagePageRequest {
|
||||
pageNum: number
|
||||
pageSize: number
|
||||
sendId: ChatUserId
|
||||
recvId: ChatUserId
|
||||
content?: string
|
||||
sendTimeList?: [number, number]
|
||||
}
|
||||
|
||||
export interface ChatPageResult<T> {
|
||||
list: T[]
|
||||
total: number
|
||||
}
|
||||
|
||||
export interface PrivateMessageModerateRequest {
|
||||
messageId: ChatUserId
|
||||
reason?: string
|
||||
}
|
||||
|
||||
export interface PrivateMessageModerateResult {
|
||||
messageId: ChatUserId
|
||||
status: 2
|
||||
recallMessageId: ChatUserId
|
||||
alreadyHidden: boolean
|
||||
notificationSent: boolean
|
||||
}
|
||||
|
||||
export const moderateMessage = (data: PrivateMessageModerateRequest) =>
|
||||
request.post<PrivateMessageModerateResult>({ url: '/chat/private-msg/moderate', data })
|
||||
|
||||
export const conversationPage = (data: ConversationPageRequest) =>
|
||||
request.post<ChatPageResult<ChatConversation>>({
|
||||
url: '/chat/private-msg/conversation/page',
|
||||
data
|
||||
})
|
||||
|
||||
// 查询私聊消息列表
|
||||
export const page = async <T = any>(data: any) => {
|
||||
return await request.post<T>({
|
||||
url: '/chat/private-msg/page',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取私聊详细信息
|
||||
export const getInfo = async (id: any) => {
|
||||
return await request.get({
|
||||
url: '/chat/private-msg/getById?id=' + id
|
||||
})
|
||||
}
|
||||
|
||||
// 私聊消息统计
|
||||
export const dailyCount = async (params: any) => {
|
||||
return await request.get({
|
||||
url: '/chat/private-msg/cout',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询敏感词列表
|
||||
export const page = async (data: any) => {
|
||||
return await request.post({
|
||||
url: '/chat/sensitive/page',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取敏感词详细信息
|
||||
export const getInfo = async (id: any) => {
|
||||
return await request.get({
|
||||
url: '/chat/sensitive/getById?id=' + id,
|
||||
})
|
||||
}
|
||||
|
||||
// 创建或者更新敏感词
|
||||
export const createOrUpdate = async (data: any) => {
|
||||
return await request.post({
|
||||
url: '/chat/sensitive/createOrUpdate',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除敏感词
|
||||
export const delByIds = async (ids:any) => {
|
||||
return await request.delete({
|
||||
url: '/chat/sensitive/delByIds?ids=' + ids
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// IoT 设备 VO
|
||||
export interface DeviceVO {
|
||||
id: number // 设备 ID,主键,自增
|
||||
deviceKey: string // 设备唯一标识符
|
||||
deviceName: string // 设备名称
|
||||
productId: number // 产品编号
|
||||
productKey: string // 产品标识
|
||||
deviceType: number // 设备类型
|
||||
nickname: string // 设备备注名称
|
||||
gatewayId: number // 网关设备 ID
|
||||
state: number // 设备状态
|
||||
onlineTime: Date // 最后上线时间
|
||||
offlineTime: Date // 最后离线时间
|
||||
activeTime: Date // 设备激活时间
|
||||
createTime: Date // 创建时间
|
||||
ip: string // 设备的 IP 地址
|
||||
firmwareVersion: string // 设备的固件版本
|
||||
deviceSecret: string // 设备密钥,用于设备认证,需安全存储
|
||||
mqttClientId: string // MQTT 客户端 ID
|
||||
mqttUsername: string // MQTT 用户名
|
||||
mqttPassword: string // MQTT 密码
|
||||
authType: string // 认证类型
|
||||
latitude: number // 设备位置的纬度
|
||||
longitude: number // 设备位置的经度
|
||||
areaId: number // 地区编码
|
||||
address: string // 设备详细地址
|
||||
serialNumber: string // 设备序列号
|
||||
config: string // 设备配置
|
||||
groupIds?: number[] // 添加分组 ID
|
||||
}
|
||||
|
||||
// IoT 设备数据 VO
|
||||
export interface DeviceDataVO {
|
||||
deviceId: number // 设备编号
|
||||
thinkModelFunctionId: number // 物模型编号
|
||||
productKey: string // 产品标识
|
||||
deviceName: string // 设备名称
|
||||
identifier: string // 属性标识符
|
||||
name: string // 属性名称
|
||||
dataType: string // 数据类型
|
||||
updateTime: Date // 更新时间
|
||||
value: string // 最新值
|
||||
}
|
||||
|
||||
// IoT 设备数据 VO
|
||||
export interface DeviceHistoryDataVO {
|
||||
time: number // 时间
|
||||
data: string // 数据
|
||||
}
|
||||
|
||||
// IoT 设备状态枚举
|
||||
export enum DeviceStateEnum {
|
||||
INACTIVE = 0, // 未激活
|
||||
ONLINE = 1, // 在线
|
||||
OFFLINE = 2 // 离线
|
||||
}
|
||||
|
||||
// IoT 设备上行 Request VO
|
||||
export interface IotDeviceUpstreamReqVO {
|
||||
id: number // 设备编号
|
||||
type: string // 消息类型
|
||||
identifier: string // 标识符
|
||||
data: any // 请求参数
|
||||
}
|
||||
|
||||
// IoT 设备下行 Request VO
|
||||
export interface IotDeviceDownstreamReqVO {
|
||||
id: number // 设备编号
|
||||
type: string // 消息类型
|
||||
identifier: string // 标识符
|
||||
data: any // 请求参数
|
||||
}
|
||||
|
||||
// MQTT 连接参数 VO
|
||||
export interface MqttConnectionParamsVO {
|
||||
mqttClientId: string // MQTT 客户端 ID
|
||||
mqttUsername: string // MQTT 用户名
|
||||
mqttPassword: string // MQTT 密码
|
||||
}
|
||||
|
||||
// 设备 API
|
||||
export const DeviceApi = {
|
||||
// 查询设备分页
|
||||
getDevicePage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/device/page`, params })
|
||||
},
|
||||
|
||||
// 查询设备详情
|
||||
getDevice: async (id: number) => {
|
||||
return await request.get({ url: `/iot/device/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增设备
|
||||
createDevice: async (data: DeviceVO) => {
|
||||
return await request.post({ url: `/iot/device/create`, data })
|
||||
},
|
||||
|
||||
// 修改设备
|
||||
updateDevice: async (data: DeviceVO) => {
|
||||
return await request.put({ url: `/iot/device/update`, data })
|
||||
},
|
||||
|
||||
// 修改设备分组
|
||||
updateDeviceGroup: async (data: { ids: number[]; groupIds: number[] }) => {
|
||||
return await request.put({ url: `/iot/device/update-group`, data })
|
||||
},
|
||||
|
||||
// 删除单个设备
|
||||
deleteDevice: async (id: number) => {
|
||||
return await request.delete({ url: `/iot/device/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 删除多个设备
|
||||
deleteDeviceList: async (ids: number[]) => {
|
||||
return await request.delete({ url: `/iot/device/delete-list`, params: { ids: ids.join(',') } })
|
||||
},
|
||||
|
||||
// 导出设备
|
||||
exportDeviceExcel: async (params: any) => {
|
||||
return await request.download({ url: `/iot/device/export-excel`, params })
|
||||
},
|
||||
|
||||
// 获取设备数量
|
||||
getDeviceCount: async (productId: number) => {
|
||||
return await request.get({ url: `/iot/device/count?productId=` + productId })
|
||||
},
|
||||
|
||||
// 获取设备的精简信息列表
|
||||
getSimpleDeviceList: async (deviceType?: number) => {
|
||||
return await request.get({ url: `/iot/device/simple-list?`, params: { deviceType } })
|
||||
},
|
||||
|
||||
// 获取导入模板
|
||||
importDeviceTemplate: async () => {
|
||||
return await request.download({ url: `/iot/device/get-import-template` })
|
||||
},
|
||||
|
||||
// 设备上行
|
||||
upstreamDevice: async (data: IotDeviceUpstreamReqVO) => {
|
||||
return await request.post({ url: `/iot/device/upstream`, data })
|
||||
},
|
||||
|
||||
// 设备下行
|
||||
downstreamDevice: async (data: IotDeviceDownstreamReqVO) => {
|
||||
return await request.post({ url: `/iot/device/downstream`, data })
|
||||
},
|
||||
|
||||
// 获取设备属性最新数据
|
||||
getLatestDeviceProperties: async (params: any) => {
|
||||
return await request.get({ url: `/iot/device/property/latest`, params })
|
||||
},
|
||||
|
||||
// 获取设备属性历史数据
|
||||
getHistoryDevicePropertyPage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/device/property/history-page`, params })
|
||||
},
|
||||
|
||||
// 查询设备日志分页
|
||||
getDeviceLogPage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/device/log/page`, params })
|
||||
},
|
||||
|
||||
// 获取设备MQTT连接参数
|
||||
getMqttConnectionParams: async (deviceId: number) => {
|
||||
return await request.get({ url: `/iot/device/mqtt-connection-params`, params: { deviceId } })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// IoT 设备分组 VO
|
||||
export interface DeviceGroupVO {
|
||||
id: number // 分组 ID
|
||||
name: string // 分组名字
|
||||
status: number // 分组状态
|
||||
description: string // 分组描述
|
||||
deviceCount?: number // 设备数量
|
||||
}
|
||||
|
||||
// IoT 设备分组 API
|
||||
export const DeviceGroupApi = {
|
||||
// 查询设备分组分页
|
||||
getDeviceGroupPage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/device-group/page`, params })
|
||||
},
|
||||
|
||||
// 查询设备分组详情
|
||||
getDeviceGroup: async (id: number) => {
|
||||
return await request.get({ url: `/iot/device-group/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增设备分组
|
||||
createDeviceGroup: async (data: DeviceGroupVO) => {
|
||||
return await request.post({ url: `/iot/device-group/create`, data })
|
||||
},
|
||||
|
||||
// 修改设备分组
|
||||
updateDeviceGroup: async (data: DeviceGroupVO) => {
|
||||
return await request.put({ url: `/iot/device-group/update`, data })
|
||||
},
|
||||
|
||||
// 删除设备分组
|
||||
deleteDeviceGroup: async (id: number) => {
|
||||
return await request.delete({ url: `/iot/device-group/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 获取设备分组的精简信息列表
|
||||
getSimpleDeviceGroupList: async () => {
|
||||
return await request.get({ url: `/iot/device-group/simple-list` })
|
||||
}
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// IoT 设备 VO
|
||||
export interface DeviceVO {
|
||||
id: number // 设备 ID,主键,自增
|
||||
deviceKey: string // 设备唯一标识符
|
||||
deviceName: string // 设备名称
|
||||
productId: number // 产品编号
|
||||
productKey: string // 产品标识
|
||||
deviceType: number // 设备类型
|
||||
nickname: string // 设备备注名称
|
||||
gatewayId: number // 网关设备 ID
|
||||
status: number // 设备状态
|
||||
statusLastUpdateTime: Date // 设备状态最后更新时间
|
||||
lastOnlineTime: Date // 最后上线时间
|
||||
lastOfflineTime: Date // 最后离线时间
|
||||
activeTime: Date // 设备激活时间
|
||||
createTime: Date // 创建时间
|
||||
ip: string // 设备的 IP 地址
|
||||
firmwareVersion: string // 设备的固件版本
|
||||
deviceSecret: string // 设备密钥,用于设备认证,需安全存储
|
||||
mqttClientId: string // MQTT 客户端 ID
|
||||
mqttUsername: string // MQTT 用户名
|
||||
mqttPassword: string // MQTT 密码
|
||||
authType: string // 认证类型
|
||||
latitude: number // 设备位置的纬度
|
||||
longitude: number // 设备位置的经度
|
||||
areaId: number // 地区编码
|
||||
address: string // 设备详细地址
|
||||
serialNumber: string // 设备序列号
|
||||
}
|
||||
|
||||
export interface DeviceUpdateStatusVO {
|
||||
id: number // 设备 ID,主键,自增
|
||||
status: number // 设备状态
|
||||
}
|
||||
|
||||
// 设备 API
|
||||
export const DeviceApi = {
|
||||
// 查询设备分页
|
||||
getDevicePage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/device/page`, params })
|
||||
},
|
||||
|
||||
// 查询设备详情
|
||||
getDevice: async (id: number) => {
|
||||
return await request.get({ url: `/iot/device/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增设备
|
||||
createDevice: async (data: DeviceVO) => {
|
||||
return await request.post({ url: `/iot/device/create`, data })
|
||||
},
|
||||
|
||||
// 修改设备
|
||||
updateDevice: async (data: DeviceVO) => {
|
||||
return await request.put({ url: `/iot/device/update`, data })
|
||||
},
|
||||
|
||||
// 修改设备状态
|
||||
updateDeviceStatus: async (data: DeviceUpdateStatusVO) => {
|
||||
return await request.put({ url: `/iot/device/update-status`, data })
|
||||
},
|
||||
|
||||
// 删除设备
|
||||
deleteDevice: async (id: number) => {
|
||||
return await request.delete({ url: `/iot/device/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 获取设备数量
|
||||
getDeviceCount: async (productId: number) => {
|
||||
return await request.get({ url: `/iot/device/count?productId=` + productId })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// IoT 插件配置 VO
|
||||
export interface PluginConfigVO {
|
||||
id: number // 主键ID
|
||||
pluginKey: string // 插件标识
|
||||
name: string // 插件名称
|
||||
description: string // 描述
|
||||
deployType: number // 部署方式
|
||||
fileName: string // 插件包文件名
|
||||
version: string // 插件版本
|
||||
type: number // 插件类型
|
||||
protocol: string // 设备插件协议类型
|
||||
status: number // 状态
|
||||
configSchema: string // 插件配置项描述信息
|
||||
config: string // 插件配置信息
|
||||
script: string // 插件脚本
|
||||
}
|
||||
|
||||
// IoT 插件配置 API
|
||||
export const PluginConfigApi = {
|
||||
// 查询插件配置分页
|
||||
getPluginConfigPage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/plugin-config/page`, params })
|
||||
},
|
||||
|
||||
// 查询插件配置详情
|
||||
getPluginConfig: async (id: number) => {
|
||||
return await request.get({ url: `/iot/plugin-config/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增插件配置
|
||||
createPluginConfig: async (data: PluginConfigVO) => {
|
||||
return await request.post({ url: `/iot/plugin-config/create`, data })
|
||||
},
|
||||
|
||||
// 修改插件配置
|
||||
updatePluginConfig: async (data: PluginConfigVO) => {
|
||||
return await request.put({ url: `/iot/plugin-config/update`, data })
|
||||
},
|
||||
|
||||
// 删除插件配置
|
||||
deletePluginConfig: async (id: number) => {
|
||||
return await request.delete({ url: `/iot/plugin-config/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 修改插件状态
|
||||
updatePluginStatus: async (data: any) => {
|
||||
return await request.put({ url: `/iot/plugin-config/update-status`, data })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// IoT 产品分类 VO
|
||||
export interface ProductCategoryVO {
|
||||
id: number // 分类 ID
|
||||
name: string // 分类名字
|
||||
sort: number // 分类排序
|
||||
status: number // 分类状态
|
||||
description: string // 分类描述
|
||||
}
|
||||
|
||||
// IoT 产品分类 API
|
||||
export const ProductCategoryApi = {
|
||||
// 查询产品分类分页
|
||||
getProductCategoryPage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/product-category/page`, params })
|
||||
},
|
||||
|
||||
// 查询产品分类详情
|
||||
getProductCategory: async (id: number) => {
|
||||
return await request.get({ url: `/iot/product-category/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增产品分类
|
||||
createProductCategory: async (data: ProductCategoryVO) => {
|
||||
return await request.post({ url: `/iot/product-category/create`, data })
|
||||
},
|
||||
|
||||
// 修改产品分类
|
||||
updateProductCategory: async (data: ProductCategoryVO) => {
|
||||
return await request.put({ url: `/iot/product-category/update`, data })
|
||||
},
|
||||
|
||||
// 删除产品分类
|
||||
deleteProductCategory: async (id: number) => {
|
||||
return await request.delete({ url: `/iot/product-category/delete?id=` + id })
|
||||
},
|
||||
|
||||
/** 获取产品分类精简列表 */
|
||||
getSimpleProductCategoryList: () => {
|
||||
return request.get({ url: '/iot/product-category/simple-list' })
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,9 @@ export interface ProductVO {
|
||||
productKey: string // 产品标识
|
||||
protocolId: number // 协议编号
|
||||
categoryId: number // 产品所属品类标识符
|
||||
categoryName?: string // 产品所属品类名称
|
||||
icon: string // 产品图标
|
||||
picUrl: string // 产品图片
|
||||
description: string // 产品描述
|
||||
validateType: number // 数据校验级别
|
||||
status: number // 产品状态
|
||||
@@ -18,6 +21,23 @@ export interface ProductVO {
|
||||
createTime: Date // 创建时间
|
||||
}
|
||||
|
||||
// IOT 数据校验级别枚举类
|
||||
export enum ValidateTypeEnum {
|
||||
WEAK = 0, // 弱校验
|
||||
NONE = 1 // 免校验
|
||||
}
|
||||
// IOT 产品设备类型枚举类 0: 直连设备, 1: 网关子设备, 2: 网关设备
|
||||
export enum DeviceTypeEnum {
|
||||
DEVICE = 0, // 直连设备
|
||||
GATEWAY_SUB = 1, // 网关子设备
|
||||
GATEWAY = 2 // 网关设备
|
||||
}
|
||||
// IOT 数据格式枚举类
|
||||
export enum DataFormatEnum {
|
||||
JSON = 0, // 标准数据格式(JSON)
|
||||
CUSTOMIZE = 1 // 透传/自定义
|
||||
}
|
||||
|
||||
// IoT 产品 API
|
||||
export const ProductApi = {
|
||||
// 查询产品分页
|
||||
@@ -57,6 +77,6 @@ export const ProductApi = {
|
||||
|
||||
// 查询产品(精简)列表
|
||||
getSimpleProductList() {
|
||||
return request.get({ url: '/iot/product/list-all-simple' })
|
||||
return request.get({ url: '/iot/product/simple-list' })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// IoT 数据桥梁 VO
|
||||
export interface DataBridgeVO {
|
||||
id?: number // 桥梁编号
|
||||
name?: string // 桥梁名称
|
||||
description?: string // 桥梁描述
|
||||
status?: number // 桥梁状态
|
||||
direction?: number // 桥梁方向
|
||||
type?: number // 桥梁类型
|
||||
config?:
|
||||
| HttpConfig
|
||||
| MqttConfig
|
||||
| RocketMQConfig
|
||||
| KafkaMQConfig
|
||||
| RabbitMQConfig
|
||||
| RedisStreamMQConfig // 桥梁配置
|
||||
}
|
||||
|
||||
interface Config {
|
||||
type: string
|
||||
}
|
||||
|
||||
/** HTTP 配置 */
|
||||
export interface HttpConfig extends Config {
|
||||
url: string
|
||||
method: string
|
||||
headers: Record<string, string>
|
||||
query: Record<string, string>
|
||||
body: string
|
||||
}
|
||||
|
||||
/** MQTT 配置 */
|
||||
export interface MqttConfig extends Config {
|
||||
url: string
|
||||
username: string
|
||||
password: string
|
||||
clientId: string
|
||||
topic: string
|
||||
}
|
||||
|
||||
/** RocketMQ 配置 */
|
||||
export interface RocketMQConfig extends Config {
|
||||
nameServer: string
|
||||
accessKey: string
|
||||
secretKey: string
|
||||
group: string
|
||||
topic: string
|
||||
tags: string
|
||||
}
|
||||
|
||||
/** Kafka 配置 */
|
||||
export interface KafkaMQConfig extends Config {
|
||||
bootstrapServers: string
|
||||
username: string
|
||||
password: string
|
||||
ssl: boolean
|
||||
topic: string
|
||||
}
|
||||
|
||||
/** RabbitMQ 配置 */
|
||||
export interface RabbitMQConfig extends Config {
|
||||
host: string
|
||||
port: number
|
||||
virtualHost: string
|
||||
username: string
|
||||
password: string
|
||||
exchange: string
|
||||
routingKey: string
|
||||
queue: string
|
||||
}
|
||||
|
||||
/** Redis Stream MQ 配置 */
|
||||
export interface RedisStreamMQConfig extends Config {
|
||||
host: string
|
||||
port: number
|
||||
password: string
|
||||
database: number
|
||||
topic: string
|
||||
}
|
||||
|
||||
/** 数据桥梁类型 */
|
||||
// TODO @puhui999:枚举用 number 可以么?
|
||||
export const IoTDataBridgeConfigType = {
|
||||
HTTP: '1',
|
||||
TCP: '2',
|
||||
WEBSOCKET: '3',
|
||||
MQTT: '10',
|
||||
DATABASE: '20',
|
||||
REDIS_STREAM: '21',
|
||||
ROCKETMQ: '30',
|
||||
RABBITMQ: '31',
|
||||
KAFKA: '32'
|
||||
} as const
|
||||
|
||||
// 数据桥梁 API
|
||||
export const DataBridgeApi = {
|
||||
// 查询数据桥梁分页
|
||||
getDataBridgePage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/data-bridge/page`, params })
|
||||
},
|
||||
|
||||
// 查询数据桥梁详情
|
||||
getDataBridge: async (id: number) => {
|
||||
return await request.get({ url: `/iot/data-bridge/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增数据桥梁
|
||||
createDataBridge: async (data: DataBridgeVO) => {
|
||||
return await request.post({ url: `/iot/data-bridge/create`, data })
|
||||
},
|
||||
|
||||
// 修改数据桥梁
|
||||
updateDataBridge: async (data: DataBridgeVO) => {
|
||||
return await request.put({ url: `/iot/data-bridge/update`, data })
|
||||
},
|
||||
|
||||
// 删除数据桥梁
|
||||
deleteDataBridge: async (id: number) => {
|
||||
return await request.delete({ url: `/iot/data-bridge/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出数据桥梁 Excel
|
||||
exportDataBridge: async (params) => {
|
||||
return await request.download({ url: `/iot/data-bridge/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
/** IoT 统计数据类型 */
|
||||
export interface IotStatisticsSummaryRespVO {
|
||||
productCategoryCount: number
|
||||
productCount: number
|
||||
deviceCount: number
|
||||
deviceMessageCount: number
|
||||
productCategoryTodayCount: number
|
||||
productTodayCount: number
|
||||
deviceTodayCount: number
|
||||
deviceMessageTodayCount: number
|
||||
deviceOnlineCount: number
|
||||
deviceOfflineCount: number
|
||||
deviceInactiveCount: number
|
||||
productCategoryDeviceCounts: Record<string, number>
|
||||
}
|
||||
|
||||
/** IoT 消息统计数据类型 */
|
||||
export interface IotStatisticsDeviceMessageSummaryRespVO {
|
||||
upstreamCounts: Record<number, number>
|
||||
downstreamCounts: Record<number, number>
|
||||
}
|
||||
|
||||
// IoT 数据统计 API
|
||||
export const ProductCategoryApi = {
|
||||
// 查询基础的数据统计
|
||||
getIotStatisticsSummary: async () => {
|
||||
return await request.get<IotStatisticsSummaryRespVO>({
|
||||
url: `/iot/statistics/get-summary`
|
||||
})
|
||||
},
|
||||
|
||||
// 查询设备上下行消息的数据统计
|
||||
getIotStatisticsDeviceMessageSummary: async (params: { startTime: number; endTime: number }) => {
|
||||
return await request.get<IotStatisticsDeviceMessageSummaryRespVO>({
|
||||
url: `/iot/statistics/get-log-summary`,
|
||||
params
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
/**
|
||||
* IoT 产品物模型
|
||||
*/
|
||||
export interface ThingModelData {
|
||||
id?: number // 物模型功能编号
|
||||
identifier?: string // 功能标识
|
||||
name?: string // 功能名称
|
||||
description?: string // 功能描述
|
||||
productId?: number // 产品编号
|
||||
productKey?: string // 产品标识
|
||||
dataType: string // 数据类型,与 dataSpecs 的 dataType 保持一致
|
||||
type: number // 功能类型
|
||||
property: ThingModelProperty // 属性
|
||||
event?: ThingModelEvent // 事件
|
||||
service?: ThingModelService // 服务
|
||||
}
|
||||
|
||||
/**
|
||||
* IoT 模拟设备
|
||||
*/
|
||||
// TODO @super:和 ThingModelSimulatorData 会不会好点
|
||||
export interface SimulatorData extends ThingModelData {
|
||||
simulateValue?: string | number // 用于存储模拟值 TODO @super:字段使用 value 会不会好点
|
||||
}
|
||||
|
||||
/**
|
||||
* ThingModelProperty 类型
|
||||
*/
|
||||
export interface ThingModelProperty {
|
||||
[key: string]: any
|
||||
}
|
||||
|
||||
/**
|
||||
* ThingModelEvent 类型
|
||||
*/
|
||||
export interface ThingModelEvent {
|
||||
[key: string]: any
|
||||
}
|
||||
|
||||
/**
|
||||
* ThingModelService 类型
|
||||
*/
|
||||
export interface ThingModelService {
|
||||
[key: string]: any
|
||||
}
|
||||
|
||||
// IoT 产品物模型 API
|
||||
export const ThingModelApi = {
|
||||
// 查询产品物模型分页
|
||||
getThingModelPage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/thing-model/page`, params })
|
||||
},
|
||||
|
||||
// 获得产品物模型列表
|
||||
getThingModelList: async (params: any) => {
|
||||
return await request.get({ url: `/iot/thing-model/list`, params })
|
||||
},
|
||||
|
||||
// 获得产品物模型
|
||||
getThingModelListByProductId: async (params: any) => {
|
||||
return await request.get({
|
||||
url: `/iot/thing-model/list-by-product-id`,
|
||||
params
|
||||
})
|
||||
},
|
||||
|
||||
// 查询产品物模型详情
|
||||
getThingModel: async (id: number) => {
|
||||
return await request.get({ url: `/iot/thing-model/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增产品物模型
|
||||
createThingModel: async (data: ThingModelData) => {
|
||||
return await request.post({ url: `/iot/thing-model/create`, data })
|
||||
},
|
||||
|
||||
// 修改产品物模型
|
||||
updateThingModel: async (data: ThingModelData) => {
|
||||
return await request.put({ url: `/iot/thing-model/update`, data })
|
||||
},
|
||||
|
||||
// 删除产品物模型
|
||||
deleteThingModel: async (id: number) => {
|
||||
return await request.delete({ url: `/iot/thing-model/delete?id=` + id })
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// IoT 产品物模型 VO
|
||||
export interface ThinkModelFunctionVO {
|
||||
id: number // 物模型功能编号
|
||||
identifier: string // 功能标识
|
||||
name: string // 功能名称
|
||||
description: string // 功能描述
|
||||
productId: number // 产品编号
|
||||
productKey: string // 产品标识
|
||||
type: number // 功能类型
|
||||
property: string // 属性
|
||||
event: string // 事件
|
||||
service: string // 服务
|
||||
}
|
||||
|
||||
// IoT 产品物模型 API
|
||||
export const ThinkModelFunctionApi = {
|
||||
// 查询产品物模型分页
|
||||
getThinkModelFunctionPage: async (params: any) => {
|
||||
return await request.get({ url: `/iot/think-model-function/page`, params })
|
||||
},
|
||||
// 获得产品物模型
|
||||
getThinkModelFunctionListByProductId: async (params: any) => {
|
||||
return await request.get({
|
||||
url: `/iot/think-model-function/list-by-product-id`,
|
||||
params
|
||||
})
|
||||
},
|
||||
|
||||
// 查询产品物模型详情
|
||||
getThinkModelFunction: async (id: number) => {
|
||||
return await request.get({ url: `/iot/think-model-function/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增产品物模型
|
||||
createThinkModelFunction: async (data: ThinkModelFunctionVO) => {
|
||||
return await request.post({ url: `/iot/think-model-function/create`, data })
|
||||
},
|
||||
|
||||
// 修改产品物模型
|
||||
updateThinkModelFunction: async (data: ThinkModelFunctionVO) => {
|
||||
return await request.put({ url: `/iot/think-model-function/update`, data })
|
||||
},
|
||||
|
||||
// 删除产品物模型
|
||||
deleteThinkModelFunction: async (id: number) => {
|
||||
return await request.delete({ url: `/iot/think-model-function/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出产品物模型 Excel
|
||||
exportThinkModelFunction: async (params) => {
|
||||
return await request.download({ url: `/iot/think-model-function/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -22,11 +22,6 @@ export const register = (data: RegisterVO) => {
|
||||
return request.post({ url: '/system/auth/register', data })
|
||||
}
|
||||
|
||||
// 刷新访问令牌
|
||||
export const refreshToken = () => {
|
||||
return request.post({ url: '/system/auth/refresh-token?refreshToken=' + getRefreshToken() })
|
||||
}
|
||||
|
||||
// 使用租户名,获得租户编号
|
||||
export const getTenantIdByName = (name: string) => {
|
||||
return request.get({ url: '/system/tenant/get-id-by-name?name=' + name })
|
||||
@@ -76,12 +71,17 @@ export const socialAuthRedirect = (type: number, redirectUri: string) => {
|
||||
})
|
||||
}
|
||||
// 获取验证图片以及 token
|
||||
export const getCode = (data) => {
|
||||
export const getCode = (data: any) => {
|
||||
debugger
|
||||
return request.postOriginal({ url: 'system/captcha/get', data })
|
||||
}
|
||||
|
||||
// 滑动或者点选验证
|
||||
export const reqCheck = (data) => {
|
||||
export const reqCheck = (data: any) => {
|
||||
return request.postOriginal({ url: 'system/captcha/check', data })
|
||||
}
|
||||
|
||||
// 通过短信重置密码
|
||||
export const smsResetPassword = (data: any) => {
|
||||
return request.post({ url: '/system/auth/reset-password', data })
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 礼物商品 VO
|
||||
export interface GiftVO {
|
||||
id: number // 礼物商品id
|
||||
title: number // 礼物标题
|
||||
price: number // 礼物价格(分)
|
||||
image: string // 礼物图片
|
||||
status: string // 礼物状态
|
||||
}
|
||||
|
||||
// 礼物商品 API
|
||||
export const GiftApi = {
|
||||
// 查询礼物商品分页
|
||||
getGiftPage: async (params: any) => {
|
||||
return await request.get({ url: `/trade/gift/page`, params })
|
||||
},
|
||||
|
||||
// 查询礼物商品详情
|
||||
getGift: async (id: number) => {
|
||||
return await request.get({ url: `/trade/gift/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增礼物商品
|
||||
createGift: async (data: GiftVO) => {
|
||||
return await request.post({ url: `/trade/gift/create`, data })
|
||||
},
|
||||
|
||||
// 修改礼物商品
|
||||
updateGift: async (data: GiftVO) => {
|
||||
return await request.put({ url: `/trade/gift/update`, data })
|
||||
},
|
||||
|
||||
// 删除礼物商品
|
||||
deleteGift: async (id: number) => {
|
||||
return await request.delete({ url: `/trade/gift/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出礼物商品 Excel
|
||||
exportGift: async (params) => {
|
||||
return await request.download({ url: `/trade/gift/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -101,7 +101,7 @@ export const deleteSpu = (id: number) => {
|
||||
}
|
||||
|
||||
// 导出商品 Spu Excel
|
||||
export const exportSpu = async (params) => {
|
||||
export const exportSpu = async (params: any) => {
|
||||
return await request.download({ url: '/product/spu/export', params })
|
||||
}
|
||||
|
||||
|
||||
@@ -37,3 +37,8 @@ export const approveBrokerageWithdraw = async (id: number) => {
|
||||
export const rejectBrokerageWithdraw = async (data: BrokerageWithdrawVO) => {
|
||||
return await request.put({ url: `/trade/brokerage-withdraw/reject`, data })
|
||||
}
|
||||
|
||||
// 导出佣金提现 Excel
|
||||
export const exportBrokerageWithdraw = async (params: any) => {
|
||||
return await request.download({ url: `/trade/brokerage-withdraw/export-excel`, params })
|
||||
}
|
||||
@@ -34,6 +34,7 @@ export interface OrderVO {
|
||||
deliveryTemplateId?: number | null // 配送模板编号
|
||||
logisticsId?: number | null // 发货物流公司编号
|
||||
logisticsNo?: string // 发货物流单号
|
||||
logisticsLabel?: string //发货物流面单短链
|
||||
deliveryTime?: Date | null // 发货时间
|
||||
receiveTime?: Date | null // 收货时间
|
||||
receiverName?: string // 收件人名称
|
||||
@@ -120,6 +121,16 @@ export interface TradeOrderSummaryRespVO {
|
||||
afterSalePrice?: string
|
||||
}
|
||||
|
||||
// 用户发货模版
|
||||
export function importMchTemplate() {
|
||||
return request.download({ url: '/trade/order/get-import-template' })
|
||||
}
|
||||
|
||||
// 查询交易订单列表
|
||||
export const exportOrderExcel = async (params: any) => {
|
||||
return await request.download({ url: `/trade/order/export-excel`, params })
|
||||
}
|
||||
|
||||
// 查询交易订单列表
|
||||
export const getOrderPage = async (params: any) => {
|
||||
return await request.get({ url: `/trade/order/page`, params })
|
||||
@@ -141,7 +152,7 @@ export const getExpressTrackList = async (id: number | null) => {
|
||||
}
|
||||
|
||||
export interface DeliveryVO {
|
||||
id?: number // 订单编号
|
||||
id: number // 订单编号
|
||||
logisticsId: number | null // 物流公司编号
|
||||
logisticsNo: string // 物流编号
|
||||
}
|
||||
@@ -151,7 +162,16 @@ export const deliveryOrder = async (data: DeliveryVO) => {
|
||||
return await request.put({ url: `/trade/order/delivery`, data })
|
||||
}
|
||||
|
||||
// 订单备注
|
||||
//申通快递(快递100)订单创建
|
||||
export const deliveryOrder100 = async (data: { id: number }) => {
|
||||
return await request.put({ url: `/trade/order/delivery-kuaidi100?id=${data.id}`, data })
|
||||
}
|
||||
|
||||
// 订单取消(传入 id)
|
||||
export const cancelOrder = async (id: number) => {
|
||||
return await request.put({ url: `/trade/order/cancel?id=${id}` })
|
||||
}
|
||||
|
||||
export const updateOrderRemark = async (data: any) => {
|
||||
return await request.put({ url: `/trade/order/update-remark`, data })
|
||||
}
|
||||
@@ -186,3 +206,4 @@ export const getOrderByPickUpVerifyCode = async (pickUpVerifyCode: string) => {
|
||||
params: { pickUpVerifyCode }
|
||||
})
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface AirlineAccountVO {
|
||||
id?: number
|
||||
mobile: string
|
||||
channel: string
|
||||
password?: string
|
||||
startTime: string
|
||||
endTime: string
|
||||
deviceId?: string
|
||||
status: number
|
||||
remark?: string
|
||||
userId?: number
|
||||
expired?: boolean
|
||||
notStarted?: boolean
|
||||
createTime?: string
|
||||
}
|
||||
|
||||
export const channelOptions = [
|
||||
{ value: 'CZ', label: '南方航空' },
|
||||
{ value: 'MU', label: '东方航空' },
|
||||
{ value: 'HU', label: '海南航空' }
|
||||
]
|
||||
|
||||
// 渠道编码 -> 全称(列表页等处展示用;存储值仍为 CZ/MU/HU)
|
||||
export const channelLabelMap: Record<string, string> = {
|
||||
CZ: '南方航空',
|
||||
MU: '东方航空',
|
||||
HU: '海南航空'
|
||||
}
|
||||
|
||||
export const getAirlineAccountPage = async (params: any) => {
|
||||
return await request.get({ url: `/member/airline-account/page`, params })
|
||||
}
|
||||
|
||||
export const getAirlineAccount = async (id: number) => {
|
||||
return await request.get({ url: `/member/airline-account/get?id=` + id })
|
||||
}
|
||||
|
||||
export const createAirlineAccount = async (data: AirlineAccountVO) => {
|
||||
return await request.post({ url: `/member/airline-account/create`, data })
|
||||
}
|
||||
|
||||
export const updateAirlineAccount = async (data: AirlineAccountVO) => {
|
||||
return await request.put({ url: `/member/airline-account/update`, data })
|
||||
}
|
||||
|
||||
export const deleteAirlineAccount = async (id: number) => {
|
||||
return await request.delete({ url: `/member/airline-account/delete?id=` + id })
|
||||
}
|
||||
|
||||
export const unbindAirlineDevice = async (id: number) => {
|
||||
return await request.put({ url: `/member/airline-account/unbind-device?id=` + id })
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 用户认证 VO
|
||||
export interface AuthVO {
|
||||
id: number // 认证编号
|
||||
bizType: string // 认证类型
|
||||
bizId: number // 认证类型编号
|
||||
authPic: number // 认证图片或视频
|
||||
authExtraJson: string // 认证额外信息(json)
|
||||
authTime: Date // 认证时间
|
||||
authMemberId: number // 认证人编号(-1为系统认证)
|
||||
authStatus: string // 认证状态
|
||||
}
|
||||
|
||||
// 用户认证 API
|
||||
export const AuthApi = {
|
||||
// 查询用户认证分页
|
||||
getAuthPage: async (params: any) => {
|
||||
return await request.get({ url: `/member/com-auth/page`, params })
|
||||
},
|
||||
|
||||
// 查询用户认证详情
|
||||
getAuth: async (id: number) => {
|
||||
return await request.get({ url: `/member/com-auth/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增用户认证
|
||||
createAuth: async (data: AuthVO) => {
|
||||
return await request.post({ url: `/member/com-auth/create`, data })
|
||||
},
|
||||
|
||||
// 修改用户认证
|
||||
updateAuth: async (data: AuthVO) => {
|
||||
return await request.put({ url: `/member/com-auth/update`, data })
|
||||
},
|
||||
|
||||
// 检查用户认证
|
||||
checkAuth: async (data: AuthVO) => {
|
||||
return await request.post({ url: `/member/com-auth/check`, data })
|
||||
},
|
||||
|
||||
// 删除用户认证
|
||||
deleteAuth: async (id: number) => {
|
||||
return await request.delete({ url: `/member/com-auth/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出用户认证 Excel
|
||||
exportAuth: async (params) => {
|
||||
return await request.download({ url: `/member/com-auth/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 用户反馈 VO
|
||||
export interface FeedbackVO {
|
||||
id: number // 用户反馈id
|
||||
memberId: number // 用户编号
|
||||
content: string // 反馈内容
|
||||
pic: string // 反馈图片
|
||||
}
|
||||
|
||||
// 用户反馈 API
|
||||
export const FeedbackApi = {
|
||||
// 查询用户反馈分页
|
||||
getFeedbackPage: async (params: any) => {
|
||||
return await request.get({ url: `/member/feedback/page`, params })
|
||||
},
|
||||
|
||||
// 查询用户反馈详情
|
||||
getFeedback: async (id: number) => {
|
||||
return await request.get({ url: `/member/feedback/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增用户反馈
|
||||
createFeedback: async (data: FeedbackVO) => {
|
||||
return await request.post({ url: `/member/feedback/create`, data })
|
||||
},
|
||||
|
||||
// 修改用户反馈
|
||||
updateFeedback: async (data: FeedbackVO) => {
|
||||
return await request.put({ url: `/member/feedback/update`, data })
|
||||
},
|
||||
|
||||
// 删除用户反馈
|
||||
deleteFeedback: async (id: number) => {
|
||||
return await request.delete({ url: `/member/feedback/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出用户反馈 Excel
|
||||
exportFeedback: async (params) => {
|
||||
return await request.download({ url: `/member/feedback/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 会员类型 VO
|
||||
export interface OpenTypeVO {
|
||||
id: number // 会员开通类型
|
||||
title: string // 会员开通分类标题
|
||||
icon: string // 图标
|
||||
preferentialPrice: number // 价格(优惠价)
|
||||
originalPrice: number // 价格(原价)
|
||||
duration: number // 时长(天)
|
||||
status: string // 状态
|
||||
isHot: string // 是否热门
|
||||
sort: number // 排序
|
||||
}
|
||||
|
||||
// 会员类型 API
|
||||
export const OpenTypeApi = {
|
||||
// 查询会员类型分页
|
||||
getOpenTypePage: async (params: any) => {
|
||||
return await request.get({ url: `/member/open-type/page`, params })
|
||||
},
|
||||
|
||||
// 查询会员类型详情
|
||||
getOpenType: async (id: number) => {
|
||||
return await request.get({ url: `/member/open-type/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增会员类型
|
||||
createOpenType: async (data: OpenTypeVO) => {
|
||||
return await request.post({ url: `/member/open-type/create`, data })
|
||||
},
|
||||
|
||||
// 修改会员类型
|
||||
updateOpenType: async (data: OpenTypeVO) => {
|
||||
return await request.put({ url: `/member/open-type/update`, data })
|
||||
},
|
||||
|
||||
// 删除会员类型
|
||||
deleteOpenType: async (id: number) => {
|
||||
return await request.delete({ url: `/member/open-type/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出会员类型 Excel
|
||||
exportOpenType: async (params) => {
|
||||
return await request.download({ url: `/member/open-type/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 会员开通记录 API
|
||||
export const OpenTypeHistoryApi = {
|
||||
lastByUserId: async (params: any) => {
|
||||
return await request.get({ url: `/member/open-type/history/last-by-user-id`, params })
|
||||
},
|
||||
adminOpen: async (data: any) => {
|
||||
return await request.post({ url: `/member/open-type/history/admin-open`, data })
|
||||
},
|
||||
page: async (params: any) => {
|
||||
return await request.get({ url: `/member/open-type/history/page`, params })
|
||||
},
|
||||
refund: async (params: any) => {
|
||||
return await request.get({ url: `/member/open-type/history/refund`, params })
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 朋友圈操作 VO
|
||||
export interface OperationVO {
|
||||
id: number // 收件地址编号
|
||||
memberId: number // 用户编号
|
||||
memberRecentId: number // 朋友圈编号
|
||||
bizType: string // 点赞、屏蔽、举报
|
||||
tapTime: Date // 点击时间
|
||||
cancelTime: Date // 取消时间
|
||||
reportType: string // 举报类型
|
||||
scoreSc: number // 身材评分
|
||||
scoreNx: number // 耐心评分
|
||||
scoreSk: number // 爽快评分
|
||||
scoreYq: number // 有趣评分
|
||||
}
|
||||
|
||||
// 朋友圈操作 API
|
||||
export const OperationApi = {
|
||||
// 查询朋友圈操作分页
|
||||
getOperationPage: async (params: any) => {
|
||||
return await request.get({ url: `/member/operation/page`, params })
|
||||
},
|
||||
|
||||
// 查询朋友圈操作详情
|
||||
getOperation: async (id: number) => {
|
||||
return await request.get({ url: `/member/operation/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增朋友圈操作
|
||||
createOperation: async (data: OperationVO) => {
|
||||
return await request.post({ url: `/member/operation/create`, data })
|
||||
},
|
||||
|
||||
// 修改朋友圈操作
|
||||
updateOperation: async (data: OperationVO) => {
|
||||
return await request.put({ url: `/member/operation/update`, data })
|
||||
},
|
||||
|
||||
// 删除朋友圈操作
|
||||
deleteOperation: async (id: number) => {
|
||||
return await request.delete({ url: `/member/operation/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出朋友圈操作 Excel
|
||||
exportOperation: async (params) => {
|
||||
return await request.download({ url: `/member/operation/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export async function getRecentPage(data: any) {
|
||||
return await request.post({ url: `/member/recent-cfg/create-or-update`, data })
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 朋友圈 VO
|
||||
export interface RecentVO {
|
||||
id: number // 收件地址编号
|
||||
memberId: number // 用户编号
|
||||
coverPic: string // 主图
|
||||
coverVideo: string // 视频
|
||||
description: string // 描述
|
||||
issueLong: number // 发布-经度
|
||||
issueLat: number // 发布-纬度
|
||||
issueProvince: string // 发布-省
|
||||
issueCity: string // 发布-市
|
||||
issueDistrict: string // 发布-区
|
||||
issueAddress: string // 发布-详细地址
|
||||
visible: boolean // 是否展示
|
||||
auditStatus: number // 审核状态:0-审核中,1-审核通过,2-审核不通过
|
||||
auditSource?: 'THIRD_PARTY' | 'MANUAL' | 'HISTORY' // 审核来源
|
||||
auditReason?: string // 审核原因
|
||||
auditTime?: string // 审核时间
|
||||
auditUserId?: number // 人工审核用户编号
|
||||
createTime?: string // 创建时间
|
||||
}
|
||||
|
||||
export interface RecentAuditReqVO {
|
||||
id: number
|
||||
auditStatus: 1 | 2
|
||||
auditReason?: string
|
||||
}
|
||||
|
||||
export interface RecentVisibleReqVO {
|
||||
id: number
|
||||
visible: boolean
|
||||
}
|
||||
|
||||
// 朋友圈 API
|
||||
export const RecentApi = {
|
||||
// 查询朋友圈分页
|
||||
getRecentPage: async (params: any) => {
|
||||
return await request.get({ url: `/member/recent/page`, params })
|
||||
},
|
||||
|
||||
// 查询朋友圈详情
|
||||
getRecent: async (id: number) => {
|
||||
return await request.get({ url: `/member/recent/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增朋友圈
|
||||
createRecent: async (data: RecentVO) => {
|
||||
return await request.post({ url: `/member/recent/create`, data })
|
||||
},
|
||||
|
||||
// 修改朋友圈
|
||||
updateRecent: async (data: RecentVO) => {
|
||||
return await request.put({ url: `/member/recent/update`, data })
|
||||
},
|
||||
|
||||
// 人工审核朋友圈
|
||||
auditRecent: async (data: RecentAuditReqVO) => {
|
||||
return await request.put({ url: `/member/recent/audit`, data })
|
||||
},
|
||||
|
||||
// 更新朋友圈展示状态
|
||||
updateRecentVisible: async (data: RecentVisibleReqVO) => {
|
||||
return await request.put({ url: `/member/recent/visible`, data })
|
||||
},
|
||||
|
||||
// 删除朋友圈
|
||||
deleteRecent: async (id: number) => {
|
||||
return await request.delete({ url: `/member/recent/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出朋友圈 Excel
|
||||
exportRecent: async (params) => {
|
||||
return await request.download({ url: `/member/recent/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,9 @@ export interface UserVO {
|
||||
loginIp: string
|
||||
mark: string
|
||||
mobile: string
|
||||
wechatNum?: string | null
|
||||
wechatQrCode?: string | null
|
||||
addressAreaNames?: string[]
|
||||
name: string | undefined
|
||||
nickname: string | undefined
|
||||
registerIp: string
|
||||
@@ -27,6 +30,38 @@ export const getUserPage = async (params) => {
|
||||
return await request.get({ url: `/member/user/page`, params })
|
||||
}
|
||||
|
||||
export interface UserExportProgress {
|
||||
taskId: string
|
||||
status: 'WAITING' | 'RUNNING' | 'SUCCESS' | 'FAILURE'
|
||||
total: number
|
||||
processed: number
|
||||
progress: number
|
||||
message: string
|
||||
fileName: string
|
||||
existingTask: boolean
|
||||
retentionHours: number
|
||||
}
|
||||
|
||||
// 使用与列表相同的查询参数序列化方式,时间范围、标签数组等保持一致。
|
||||
export const exportUsers = (params: Record<string, unknown>) => {
|
||||
return request.post<UserExportProgress>({ url: '/member/user/export-async', params })
|
||||
}
|
||||
|
||||
export const getUserExportProgress = (taskId: string) => {
|
||||
return request.get<UserExportProgress>({
|
||||
url: '/member/user/export-progress',
|
||||
params: { taskId }
|
||||
})
|
||||
}
|
||||
|
||||
export const downloadUserExport = (taskId: string) => {
|
||||
return request.download<Blob>({
|
||||
url: '/member/user/export-download',
|
||||
params: { taskId },
|
||||
timeout: 300000
|
||||
})
|
||||
}
|
||||
|
||||
// 查询会员用户详情
|
||||
export const getUser = async (id: number) => {
|
||||
return await request.get({ url: `/member/user/get?id=` + id })
|
||||
@@ -37,6 +72,11 @@ export const updateUser = async (data: UserVO) => {
|
||||
return await request.put({ url: `/member/user/update`, data })
|
||||
}
|
||||
|
||||
/** 更新会员用户状态(禁用后踢出 App 登录,且无法再登录) */
|
||||
export const updateUserStatus = async (data: { id: number; status: number }) => {
|
||||
return await request.put({ url: `/member/user/update-status`, data })
|
||||
}
|
||||
|
||||
// 修改会员用户等级
|
||||
export const updateUserLevel = async (data: any) => {
|
||||
return await request.put({ url: `/member/user/update-level`, data })
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 用户查看记录 VO
|
||||
export interface ViewRecordVO {
|
||||
id: number // 收件地址编号
|
||||
memberId: number // 用户编号
|
||||
bizType: string // 查询分类、查看朋友圈
|
||||
bizId: number // 查询分类、查看朋友圈
|
||||
title: string // 查看的标题
|
||||
viewStartTime: Date // 开始查看时间
|
||||
viewEndTime: Date // 结束查看时间
|
||||
viewSecond: number // 查看时间(秒)
|
||||
}
|
||||
|
||||
// 用户查看记录 API
|
||||
export const ViewRecordApi = {
|
||||
// 查询用户查看记录分页
|
||||
getViewRecordPage: async (params: any) => {
|
||||
return await request.get({ url: `/member/view-record/page`, params })
|
||||
},
|
||||
|
||||
// 查询用户查看记录详情
|
||||
getViewRecord: async (id: number) => {
|
||||
return await request.get({ url: `/member/view-record/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增用户查看记录
|
||||
createViewRecord: async (data: ViewRecordVO) => {
|
||||
return await request.post({ url: `/member/view-record/create`, data })
|
||||
},
|
||||
|
||||
// 修改用户查看记录
|
||||
updateViewRecord: async (data: ViewRecordVO) => {
|
||||
return await request.put({ url: `/member/view-record/update`, data })
|
||||
},
|
||||
|
||||
// 删除用户查看记录
|
||||
deleteViewRecord: async (id: number) => {
|
||||
return await request.delete({ url: `/member/view-record/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出用户查看记录 Excel
|
||||
exportViewRecord: async (params) => {
|
||||
return await request.download({ url: `/member/view-record/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 提现金额审核 VO
|
||||
export interface WalletTxAuthVO {
|
||||
id: number // 钱包提现
|
||||
userId: number // 用户id
|
||||
walletId: number // 钱包id
|
||||
bizType: string // 提现类型
|
||||
bizId: number // 提现类型绑定id
|
||||
txPrice: number // 提现金额
|
||||
title: string // 提现title
|
||||
checkStatus: string // 提现状态
|
||||
checkTime: Date // 审核时间
|
||||
txRefuse: string // 提现拒绝信息
|
||||
}
|
||||
|
||||
// 提现金额审核 API
|
||||
export const WalletTxAuthApi = {
|
||||
// 查询提现金额审核分页
|
||||
getWalletTxAuthPage: async (params: any) => {
|
||||
return await request.get({ url: `/pay/wallet-tx-auth/page`, params })
|
||||
},
|
||||
|
||||
// 查询提现金额审核详情
|
||||
getWalletTxAuth: async (id: number) => {
|
||||
return await request.get({ url: `/pay/wallet-tx-auth/get?id=` + id })
|
||||
},
|
||||
|
||||
// 审核
|
||||
check: async (data: WalletTxAuthVO) => {
|
||||
return await request.post({ url: `/pay/wallet-tx-auth/check`, data })
|
||||
},
|
||||
|
||||
// 新增提现金额审核
|
||||
createWalletTxAuth: async (data: WalletTxAuthVO) => {
|
||||
return await request.post({ url: `/pay/wallet-tx-auth/create`, data })
|
||||
},
|
||||
|
||||
// 修改提现金额审核
|
||||
updateWalletTxAuth: async (data: WalletTxAuthVO) => {
|
||||
return await request.put({ url: `/pay/wallet-tx-auth/update`, data })
|
||||
},
|
||||
|
||||
// 删除提现金额审核
|
||||
deleteWalletTxAuth: async (id: number) => {
|
||||
return await request.delete({ url: `/pay/wallet-tx-auth/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出提现金额审核 Excel
|
||||
exportWalletTxAuth: async (params) => {
|
||||
return await request.download({ url: `/pay/wallet-tx-auth/export-excel`, params })
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface SubAccountVO {
|
||||
id: number
|
||||
userId: number
|
||||
username: string
|
||||
nickname: string
|
||||
status: number
|
||||
loginDate: Date
|
||||
createTime: Date
|
||||
menuIds: number[]
|
||||
}
|
||||
|
||||
export interface SubAccountMenuVO {
|
||||
id: number
|
||||
parentId: number
|
||||
name: string
|
||||
type: number
|
||||
sort: number
|
||||
}
|
||||
|
||||
// 查询子账号列表
|
||||
export const getSubAccountList = () => {
|
||||
return request.get({ url: '/system/sub-account/list' })
|
||||
}
|
||||
|
||||
// 查询当前账号拥有的菜单(用于给子账号勾选)
|
||||
export const getHolderMenuList = () => {
|
||||
return request.get({ url: '/system/sub-account/menu-list' })
|
||||
}
|
||||
|
||||
// 创建子账号
|
||||
export const createSubAccount = (data: SubAccountVO & { password: string }) => {
|
||||
return request.post({ url: '/system/sub-account/create', data })
|
||||
}
|
||||
|
||||
// 修改子账号(昵称 + 可见菜单)
|
||||
export const updateSubAccount = (userId: number, data: SubAccountVO) => {
|
||||
return request.put({ url: '/system/sub-account/update?userId=' + userId, data })
|
||||
}
|
||||
|
||||
// 修改子账号状态
|
||||
export const updateSubAccountStatus = (userId: number, status: number) => {
|
||||
return request.put({ url: '/system/sub-account/update-status', data: { userId, status } })
|
||||
}
|
||||
|
||||
// 重置子账号密码
|
||||
export const resetSubAccountPassword = (userId: number, password: string) => {
|
||||
return request.put({ url: '/system/sub-account/reset-password', data: { userId, password } })
|
||||
}
|
||||
|
||||
// 删除子账号
|
||||
export const deleteSubAccount = (userId: number) => {
|
||||
return request.delete({ url: '/system/sub-account/delete?userId=' + userId })
|
||||
}
|
||||
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 13 KiB |