fix: nginx配置修正Gitea路由 /doc/ 而非 /pms/doc/

This commit is contained in:
12451 2026-07-02 15:18:45 +08:00
parent 4515021f37
commit 652bde44c4
31 changed files with 580 additions and 79 deletions

View File

@ -0,0 +1,11 @@
{
"sessionID": "ses_0e18e37d9ffegUbDkGCoIOjGFO",
"updatedAt": "2026-07-01T16:10:15.231Z",
"sources": {
"background-task": {
"state": "active",
"reason": "1 background task(s) active",
"updatedAt": "2026-07-01T16:10:15.231Z"
}
}
}

View File

@ -0,0 +1,11 @@
{
"sessionID": "ses_0e19403caffeuYBymluO822Agr",
"updatedAt": "2026-07-01T16:04:03.544Z",
"sources": {
"background-task": {
"state": "active",
"reason": "2 background task(s) active",
"updatedAt": "2026-07-01T16:04:03.544Z"
}
}
}

View File

@ -0,0 +1,11 @@
{
"sessionID": "ses_0e1b1569fffe2oQDtzHgu4ghIp",
"updatedAt": "2026-07-01T15:32:05.292Z",
"sources": {
"background-task": {
"state": "active",
"reason": "2 background task(s) active",
"updatedAt": "2026-07-01T15:32:05.292Z"
}
}
}

View File

@ -0,0 +1,11 @@
{
"sessionID": "ses_0e3ddd089ffeSaxAHykBGPJtrS",
"updatedAt": "2026-07-01T05:24:46.912Z",
"sources": {
"background-task": {
"state": "active",
"reason": "4 background task(s) active",
"updatedAt": "2026-07-01T05:24:46.912Z"
}
}
}

View File

@ -0,0 +1,11 @@
{
"sessionID": "ses_0e5905b12ffefGBg8ADFu7rUlS",
"updatedAt": "2026-06-30T21:31:40.065Z",
"sources": {
"background-task": {
"state": "active",
"reason": "2 background task(s) active",
"updatedAt": "2026-06-30T21:31:40.065Z"
}
}
}

View File

@ -0,0 +1,10 @@
{
"sessionID": "ses_0e5b13196ffeIOuDn3eHC3nhoD",
"updatedAt": "2026-06-30T21:16:54.915Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-30T21:16:54.915Z"
}
}
}

View File

@ -0,0 +1,11 @@
{
"sessionID": "ses_0e5b145e8ffeu1nFUv6Ecijw7R",
"updatedAt": "2026-06-30T20:53:43.643Z",
"sources": {
"background-task": {
"state": "active",
"reason": "2 background task(s) active",
"updatedAt": "2026-06-30T20:53:43.643Z"
}
}
}

View File

@ -0,0 +1,10 @@
{
"sessionID": "ses_0e5c11c7dffeM9442HRyKNYgfw",
"updatedAt": "2026-06-30T20:38:55.488Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-30T20:38:55.488Z"
}
}
}

View File

@ -0,0 +1,11 @@
{
"sessionID": "ses_0e5c16fa8ffeAkc8PLVdT6qmhN",
"updatedAt": "2026-06-30T20:35:59.130Z",
"sources": {
"background-task": {
"state": "active",
"reason": "2 background task(s) active",
"updatedAt": "2026-06-30T20:35:59.130Z"
}
}
}

View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA1oWjsNXSm+9Cr6M3GWQ4notBxkby3Jw0+BRK2m+4gP9Z6KBh
+D+aPdEsrdnDqlcmadL11j2ntrVhLznTK5B+aVs1nEQL3mdBo/m2IcestZac9/Kf
KpgJXUNkraOC/xiJGGErbaoclRvZI7ip4TGlVaOMjTsQXJ6erRUXgeBg5aE3XPli
FQZCH3zmaJVdMjsWvIOrcGhFJeiCw+mv/NNBfa3jPWq7Z/ZOZ1pY4bip2SeTFSyR
ccRWQCp2QIb6s7R0Z6iKcTMW8mF8alx0L/bkRWNMILb90Lv0XSKak380fCwEQX49
XiFZv72xuR20pt1m2iugMDknmIpNV0GPwK8PWQIDAQABAoIBAAuP5d/u0lxhs6Ys
RZi6gFu5NTkW01mlGKzDSTqHOXpIaQPi+wzKfsl0p/QRz9wzOMiM3H+o0IyGL6AA
PZu0PL/4cMYEm+AnkA/isliVPr+Fx92MR9xfl+edLYS3UqTloWP9Pr45JDO8LcKh
XhSbXKYmO7nT9GCNkw9QmvT+zzIpGjvLG0BrurgibRvTlJBC2t9b1OrZrxC0OHqI
U6I3E2aVYX/qyf9jGpRHgwUs9wDKmAKmz0mMRpJEP/x45CFhPtOj82JOWZ0ui/yJ
sX6RTVOdGyzWy5gVhnQ+5WGR6mpM6DurDacLDOsx9xq0Yq+3AEGhn5coVLrwXNaT
WRMvvaECgYEA9otMdZHjwvM9CHLpOaFiyFmkhevI8EDX78Fcg4sb0h8srq9G+1sU
o6BvuLzsTZ6V0gpiStqKcvGJ3wXOkgxlSElA0BAoj5g+QAiXyFLYdepYKvUB37wL
ULWNdOERYUyapEZsQM1OquCG9ljfxzH8saJwWmrEbi+Fq0RlC+nLMdECgYEA3r/u
QcJQ9hP6WIhrss5dMpg8GArpTGxfgSUHB0Lv1JGreGgRvw8jlemkwYqJRYssNnhe
Cec3RSnb8pYQ4BKivT1+uA8zKCK8p0IjUkimfha9mLjoviHxvLq+uHrDyAuUKaxg
ucE9Xn9WdE1FtVqE/id82v7Fc5Q+I9zj5YPiHwkCgYAicqIzRzggtCXR+WRW9hK8
VbIkOCayUw0Y5daMVrKDcHGo0rrDQh2nIzKZCGSoD8F1QJgtR03S86bE76XGSE8a
g4m3yJoyPh5sigbTKagvCZhaIDOr1DVsiIGEVDI+exqcW26iu00DmS2iXBagWX6q
Pz0dlQ9vKdqubHcF7BvFEQKBgBFyPOn/mzG63NfET5MgoKIO1F4ZtK4cqtpFmShT
cM9YXXK/y+wH9oSOWS4jeJ7uyJa3lL330xdisOxuHoI+U2q4/0zRO/N/zQDYqEWQ
lSG5DD6C9Q+3PuTGR5vRWbY4WfFto+HIpdLZ7F6NktEidtolI51PaQ2lZbyPV3Yp
fzNpAoGADG8aR05hWXc7WLJQ/Jh+9yURsZ9y9XGvUHRXtKiWLWKmXRuI9QlcC1dn
hnjfywKk7POrCWVqLghJzWHrl1FEv1Eg5KKI0zyRmKR5Aywpdk7RjS3RR10BDNM3
61OpS4nazenByLoEUYYQpQsPxen86w1E6sQkJj4Xgvk3bH5EUsI=
-----END RSA PRIVATE KEY-----

View File

@ -0,0 +1,62 @@
-----BEGIN CERTIFICATE-----
MIIGHjCCBQagAwIBAgIQBVNR5fxfw0MYOSls+jFpETANBgkqhkiG9w0BAQsFADBu
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
RFYgVExTIENBIC0gRzIwHhcNMjYwNjMwMDAwMDAwWhcNMjYwOTI3MjM1OTU5WjAg
MR4wHAYDVQQDExVhcHAuYW56aGl6aGljaG9uZy5jb20wggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQDWhaOw1dKb70KvozcZZDiei0HGRvLcnDT4FErab7iA
/1nooGH4P5o90Syt2cOqVyZp0vXWPae2tWEvOdMrkH5pWzWcRAveZ0Gj+bYhx6y1
lpz38p8qmAldQ2Sto4L/GIkYYSttqhyVG9kjuKnhMaVVo4yNOxBcnp6tFReB4GDl
oTdc+WIVBkIffOZolV0yOxa8g6twaEUl6ILD6a/800F9reM9artn9k5nWljhuKnZ
J5MVLJFxxFZAKnZAhvqztHRnqIpxMxbyYXxqXHQv9uRFY0wgtv3Qu/RdIpqTfzR8
LARBfj1eIVm/vbG5HbSm3WbaK6AwOSeYik1XQY/Arw9ZAgMBAAGjggMEMIIDADAf
BgNVHSMEGDAWgBR435GQX+7erPbFdevVTFVT7yRKtjAdBgNVHQ4EFgQUihK7KhIc
lgbamRqC1/ccZ/Ao2xowOwYDVR0RBDQwMoIVYXBwLmFuemhpemhpY2hvbmcuY29t
ghl3d3cuYXBwLmFuemhpemhpY2hvbmcuY29tMD4GA1UdIAQ3MDUwMwYGZ4EMAQIB
MCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAOBgNV
HQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGABggr
BgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNv
bTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0VuY3J5
cHRpb25FdmVyeXdoZXJlRFZUTFNDQS1HMi5jcnQwDAYDVR0TAQH/BAIwADCCAX8G
CisGAQQB1nkCBAIEggFvBIIBawFpAHcAwjF+V0UZo0XufzjespBB68fCIVoiv3/V
ta12mtkOUs0AAAGfGYuP6wAABAMASDBGAiEAqCbOvbynHaT0XsQA4c7Z+AqKUUn1
XDPxjZYgpUsyrkgCIQDgHrKyfgOGZKVw9UcKz/aC4M0H3zjR2fCY39La/Mdc4wB2
ANdtfRDRp/V3wsfpX9cAv/mCyTNaZeHQswFzF8DIxWl3AAABnxmLj68AAAQDAEcw
RQIhAL0TH3j2VGXlJRRlN8q0XoDw1a0WeYEjpphj5+lljg54AiAQoCtFb3rM2k/a
1J9nvwqrMjsiY9WYtS/9K0XICzvqgAB2AJROQ4f67MHvgfMZJCaoGGUBx9NfOAIB
P3JnfVU3LhnYAAABnxmLj+gAAAQDAEcwRQIgBj4zfZWgx8aOmNCl+kWC/Plrf0Aa
VahJNbel4+JozI4CIQDHDWj4jzpzPBAX3Hazdp2zYFEiE30u922shRNSoVT/LjAN
BgkqhkiG9w0BAQsFAAOCAQEAaBw2sE/V+tdwVOaPMHmf8Mr/+z8w1D6Kc3ao/YHw
jyBc45Ja1puu7HzJD3G2oBA4BxR/Gtq4fmDQbvW6upVZoYp0kpuuNBhS7j0j3b7P
fiQSuMrAY7dMwMTPwEFyxVPxfPnmDDdUJHG6+TboczLyzcn3Di7fV6wIKkdv2e8F
t5Pv9oBBcOKXp1n7XqBdflsr5B9xlSC2yW3po9/UqMmEQ2U0NSeY2DRn7AHaH+OT
Clfonj4rcXAY8bdpj6VfiQBsE6H4eDCXtV3HlOO7Bi6cUpChRIeY8WpZPidqsEmK
TITpaK42w6B/m4p/inOoD3LifSRnaH/CYFtgR5ykM50ASg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQDeD/te5iy2EQn2CMnO1e0zANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
MjAeFw0xNzExMjcxMjQ2NDBaFw0yNzExMjcxMjQ2NDBaMG4xCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH
MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO8Uf46i/nr7pkgTDqnE
eSIfCFqvPnUq3aF1tMJ5hh9MnO6Lmt5UdHfBGwC9Si+XjK12cjZgxObsL6Rg1njv
NhAMJ4JunN0JGGRJGSevbJsA3sc68nbPQzuKp5Jc8vpryp2mts38pSCXorPR+sch
QisKA7OSQ1MjcFN0d7tbrceWFNbzgL2csJVQeogOBGSe/KZEIZw6gXLKeFe7mupn
NYJROi2iC11+HuF79iAttMc32Cv6UOxixY/3ZV+LzpLnklFq98XORgwkIJL1HuvP
ha8yvb+W6JislZJL+HLFtidoxmI7Qm3ZyIV66W533DsGFimFJkz3y0GeHWuSVMbI
lfsCAwEAAaOCAU8wggFLMB0GA1UdDgQWBBR435GQX+7erPbFdevVTFVT7yRKtjAf
BgNVHSMEGDAWgBROIlQgGJXm427mD/r6uRLtBhePOTAOBgNVHQ8BAf8EBAMCAYYw
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C
AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu
Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG
/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAoBs1eCLKakLtVRPFRjBIJ9LJ
L0s8ZWum8U8/1TMVkQMBn+CPb5xnCD0GSA6L/V0ZFrMNqBirrr5B241OesECvxIi
98bZ90h9+q/X5eMyOD35f8YTaEMpdnQCnawIwiHx06/0BfiTj+b/XQih+mqt3ZXe
xNCJqKexdiB2IWGSKcgahPacWkk/BAQFisKIFYEqHzV974S3FAz/8LIfD58xnsEN
GfzyIDkH3JrwYZ8caPTf6ZX9M1GrISN8HnWTtdNCH2xEajRa/h9ZBXjUyFKQrGk2
n2hcLrfZSbynEC/pSw/ET7H5nWwckjmAJ1l9fcnbqkU/pf6uMQmnfl0JQjJNSg==
-----END CERTIFICATE-----

View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAndw3DxIyO6HOwhxWQIA4spxX6a8zNn3NrQOavXFny7U+/Wbe
EpiXFsdCfFguQmagdKraiV2vBvjim1Zz6htld6sdQXfuBe/pzUqp6gW1drXgcbzg
l3t6KZY2S4cGQG5dfqqv3qySV3kUbWUG+aXhTLwBzNCm0G0S6Fh59tOieFWTCgsF
q75/TmmR7YchEqSZadb/tfboCGDamJBC2/QA1VMEtoh0PooCancO6ugVMxQ8pGU6
S6Md/dYJ7xNbvmgLc62V4ZFcHtqtQQFyK0kIc4lzbUhdGzwqN6fcJcO9ymBtfe53
Fq1rioA4d3OfoZBEcMoJWj+90W7CO8I/Kj048QIDAQABAoIBAAKz3HVzmEyRDpsg
JRHhoBbeulqT10qdiMHnh+SqZl6EcdmgwziKSDvpmWfLkq8sVp7otekYI4D5Ddge
+MkPQwNzeILAbODJJLWRC6uoAV1Q69DGrQmq4YKIwdE1NJQxz4P1pCEpzy+UMRdW
XXI0ttC7f0RkZha3Z1V2/k+NfACXX47urm6xyNhD3H6iq0Xg7AjavhUVcMvmlPgV
5/mPDQih46MlGVyfo7deb9g4KNdYDGcYIL9JDz19TFCK5B3QzCvfax5rN8FVQ4Xu
wHy7cmLHSxRGzwVZDj3nESkByHGSnmu41z0w11jsY6v2oGZ1mfF17CudaphhAJ9F
vRFc12kCgYEA2lKa+F51tqVIHUgzcChjh0mPlXXSkUL7ccEIHqngavI1N938Js8O
VVFZXLmFIjHob+OgZDyovoWG4wVlejFbj9zHQq7yLf4nm3b7RXbbSOaEJwwBpH05
46oZjIIczCt60tOe6aWEJJfHVx9+NBPB8rGZUlbkdjkGoRDnyi+7evsCgYEAuRpn
+6XDL1K5PVEY2H2ah+jizyOAi2YqWEMGh8wU0b0H1byLRjKQIiTyEWptM+qbqHE/
KxHClLwt4n/+C181GVN07e4YhhLG89rYci8yK6YxI2iaY7RZ+/PuWpMCVbQaFVb4
oYNlY8AhPlqg6p8lYthRp5p+00dFrTKHU98l2AMCgYEAxpyHZpNoOvQ5monoYYwc
nyKIgMti98sbu+yDWoHoKuKVD3Hexd9vhqYuyW/scaM9dSx66TVVvZzzjOuH2ZW1
Wjba/wrwPm8L0R54kEUEUFmEt5DwnZdeZoKEI5LqZ8LWRZ1G3/83K6L4MYXw5adj
tUlj1cg+pl5SbYxXkVPDFqkCgYEAlnkc5rlN/n5lD6+JXxRcNvfeyTy3Fpsq+S0j
dek1U3szj1ECd0JLYTZfgkDeHUIu37OQAlchsv923ZXm0x/GbpwlhfX0AanqCfpx
0gED6+/iKkKynzLRo7wcm4y+bSVHvulAnSvPlFNvstzBy3ksTzpCxtkVGHPr9GwL
DudsQDkCgYBmd8oBqHUH6avNLp1jhRgggwrkuwRwTeNuv44DqEVLKhE9dPt6+G1G
CWLxwN2H/hOk3Zde90GrDnP3IIj1V5zSLueuffMXLurDl+t0d7DegT5ueIH+8S5d
pOqnXj0EiMpyT+nApl5mNHmEKfJz5bw55j9fO+oUhobplN8LQu+keQ==
-----END RSA PRIVATE KEY-----

View File

@ -0,0 +1,62 @@
-----BEGIN CERTIFICATE-----
MIIGIDCCBQigAwIBAgIQAXNFUZ1FoZACcGPe5mZsRjANBgkqhkiG9w0BAQsFADBu
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
RFYgVExTIENBIC0gRzIwHhcNMjYwNjMwMDAwMDAwWhcNMjYwOTI3MjM1OTU5WjAh
MR8wHQYDVQQDExZ0ZXN0LmFuemhpemhpY2hvbmcuY29tMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAndw3DxIyO6HOwhxWQIA4spxX6a8zNn3NrQOavXFn
y7U+/WbeEpiXFsdCfFguQmagdKraiV2vBvjim1Zz6htld6sdQXfuBe/pzUqp6gW1
drXgcbzgl3t6KZY2S4cGQG5dfqqv3qySV3kUbWUG+aXhTLwBzNCm0G0S6Fh59tOi
eFWTCgsFq75/TmmR7YchEqSZadb/tfboCGDamJBC2/QA1VMEtoh0PooCancO6ugV
MxQ8pGU6S6Md/dYJ7xNbvmgLc62V4ZFcHtqtQQFyK0kIc4lzbUhdGzwqN6fcJcO9
ymBtfe53Fq1rioA4d3OfoZBEcMoJWj+90W7CO8I/Kj048QIDAQABo4IDBTCCAwEw
HwYDVR0jBBgwFoAUeN+RkF/u3qz2xXXr1UxVU+8kSrYwHQYDVR0OBBYEFGBXK9Em
OZwQ+QyELLrLUna3T5klMD0GA1UdEQQ2MDSCFnRlc3QuYW56aGl6aGljaG9uZy5j
b22CGnd3dy50ZXN0LmFuemhpemhpY2hvbmcuY29tMD4GA1UdIAQ3MDUwMwYGZ4EM
AQIBMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAO
BgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGA
BggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0
LmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Vu
Y3J5cHRpb25FdmVyeXdoZXJlRFZUTFNDQS1HMi5jcnQwDAYDVR0TAQH/BAIwADCC
AX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHUAwjF+V0UZo0XufzjespBB68fCIVoi
v3/Vta12mtkOUs0AAAGfGZEPMwAABAMARjBEAiAclOrfmPR4pAGkLw52V7yymb7r
s0ml3VX/h/PQyGu3XgIgGTu8EiAJ6/wYT6EgAAPTYwIteR/aO9tuCRXvRJ7en9QA
dwDXbX0Q0af1d8LH6V/XAL/5gskzWmXh0LMBcxfAyMVpdwAAAZ8ZkQ8IAAAEAwBI
MEYCIQDgYlWlZreHt0nc8UvF0Mh/dswyk49bk2H582hUlbf/kQIhANppEkfsm7eV
bIIZSK5Vdh1BTRXFQFVOnKf8GO7UgWtOAHYAlE5Dh/rswe+B8xkkJqgYZQHH0184
AgE/cmd9VTcuGdgAAAGfGZEPRgAABAMARzBFAiAXs28Vng0t7GVyn6w1ySj7OeXA
cn/evdmdMmEjJpKBLAIhAOcPsme2PM+gXg/gHvwmfvUdE7MgsoLkOHqTPYf8BTdj
MA0GCSqGSIb3DQEBCwUAA4IBAQBdKN3gs9aliU8on0miTtHoO03YWtbjOiAD1gOT
vuakaX3zpyl/jaQbjTANJ7fn95uHdjEJ9Bp+SCNAc9TABn53e34kkY6pVXe20nvb
IdTXJBBHsxuN7oOcU2Ts/gFYIWfMuECr/ND7xsAxu5NLYf7FbZp97ABVGIuPDgT4
BeOyw5UnxCUo2lRk9hjSzFsXFoQiwUqliuq6ykTelHhnKTl5j9ATszEpNXtI2qDI
Ws3M+pgctStZiV+8KE9S/431OAkBmfRP3XK+nnrnqy/pCUGRDu1HfbX5WmVsz+pZ
frZkS+e4SLrFrmDxHnNoMhpjJv9txmqbC9pk3AdTp3Fjn6ko
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQDeD/te5iy2EQn2CMnO1e0zANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
MjAeFw0xNzExMjcxMjQ2NDBaFw0yNzExMjcxMjQ2NDBaMG4xCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH
MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO8Uf46i/nr7pkgTDqnE
eSIfCFqvPnUq3aF1tMJ5hh9MnO6Lmt5UdHfBGwC9Si+XjK12cjZgxObsL6Rg1njv
NhAMJ4JunN0JGGRJGSevbJsA3sc68nbPQzuKp5Jc8vpryp2mts38pSCXorPR+sch
QisKA7OSQ1MjcFN0d7tbrceWFNbzgL2csJVQeogOBGSe/KZEIZw6gXLKeFe7mupn
NYJROi2iC11+HuF79iAttMc32Cv6UOxixY/3ZV+LzpLnklFq98XORgwkIJL1HuvP
ha8yvb+W6JislZJL+HLFtidoxmI7Qm3ZyIV66W533DsGFimFJkz3y0GeHWuSVMbI
lfsCAwEAAaOCAU8wggFLMB0GA1UdDgQWBBR435GQX+7erPbFdevVTFVT7yRKtjAf
BgNVHSMEGDAWgBROIlQgGJXm427mD/r6uRLtBhePOTAOBgNVHQ8BAf8EBAMCAYYw
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C
AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu
Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG
/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAoBs1eCLKakLtVRPFRjBIJ9LJ
L0s8ZWum8U8/1TMVkQMBn+CPb5xnCD0GSA6L/V0ZFrMNqBirrr5B241OesECvxIi
98bZ90h9+q/X5eMyOD35f8YTaEMpdnQCnawIwiHx06/0BfiTj+b/XQih+mqt3ZXe
xNCJqKexdiB2IWGSKcgahPacWkk/BAQFisKIFYEqHzV974S3FAz/8LIfD58xnsEN
GfzyIDkH3JrwYZ8caPTf6ZX9M1GrISN8HnWTtdNCH2xEajRa/h9ZBXjUyFKQrGk2
n2hcLrfZSbynEC/pSw/ET7H5nWwckjmAJ1l9fcnbqkU/pf6uMQmnfl0JQjJNSg==
-----END CERTIFICATE-----

View File

@ -199,7 +199,7 @@ server {
root /data/pms;
index index.html;
location /pms/doc/ {
location /doc/ {
proxy_pass http://127.0.0.1:3080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;

View File

@ -16,7 +16,7 @@ server {
root /data/pms;
index index.html;
location /pms/doc/ {
location /doc/ {
proxy_pass http://127.0.0.1:3080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;

191
package-lock.json generated Normal file
View File

@ -0,0 +1,191 @@
{
"name": "charging-cabinet",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"html-docx-js": "^0.3.1"
}
},
"node_modules/html-docx-js": {
"version": "0.3.1",
"resolved": "https://registry.npmmirror.com/html-docx-js/-/html-docx-js-0.3.1.tgz",
"integrity": "sha512-QSrMiRhxesqxYCa3f+2Z3ttIHPzSjDOL1tCOmIDIEET7HdabxXND6tAbsFMXAgRG4RADQ3wbl74ydMmjidaDPA==",
"license": "MIT",
"dependencies": {
"jszip": "^2.3.0",
"lodash.escape": "^3.0.0",
"lodash.merge": "^3.2.0"
}
},
"node_modules/jszip": {
"version": "2.7.0",
"resolved": "https://registry.npmmirror.com/jszip/-/jszip-2.7.0.tgz",
"integrity": "sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==",
"license": "(MIT OR GPL-3.0)",
"dependencies": {
"pako": "~1.0.2"
}
},
"node_modules/lodash._arraycopy": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz",
"integrity": "sha512-RHShTDnPKP7aWxlvXKiDT6IX2jCs6YZLCtNhOru/OX2Q/tzX295vVBK5oX1ECtN+2r86S0Ogy8ykP1sgCZAN0A==",
"license": "MIT"
},
"node_modules/lodash._arrayeach": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
"integrity": "sha512-Mn7HidOVcl3mkQtbPsuKR0Fj0N6Q6DQB77CtYncZcJc0bx5qv2q4Gl6a0LC1AN+GSxpnBDNnK3CKEm9XNA4zqQ==",
"license": "MIT"
},
"node_modules/lodash._basecopy": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
"integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==",
"license": "MIT"
},
"node_modules/lodash._basefor": {
"version": "3.0.3",
"resolved": "https://registry.npmmirror.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz",
"integrity": "sha512-6bc3b8grkpMgDcVJv9JYZAk/mHgcqMljzm7OsbmcE2FGUMmmLQTPHlh/dFqR8LA0GQ7z4K67JSotVKu5058v1A==",
"license": "MIT"
},
"node_modules/lodash._bindcallback": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
"integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==",
"license": "MIT"
},
"node_modules/lodash._createassigner": {
"version": "3.1.1",
"resolved": "https://registry.npmmirror.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz",
"integrity": "sha512-LziVL7IDnJjQeeV95Wvhw6G28Z8Q6da87LWKOPWmzBLv4u6FAT/x5v00pyGW0u38UoogNF2JnD3bGgZZDaNEBw==",
"license": "MIT",
"dependencies": {
"lodash._bindcallback": "^3.0.0",
"lodash._isiterateecall": "^3.0.0",
"lodash.restparam": "^3.0.0"
}
},
"node_modules/lodash._getnative": {
"version": "3.9.1",
"resolved": "https://registry.npmmirror.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
"integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==",
"license": "MIT"
},
"node_modules/lodash._isiterateecall": {
"version": "3.0.9",
"resolved": "https://registry.npmmirror.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
"integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==",
"license": "MIT"
},
"node_modules/lodash._root": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/lodash._root/-/lodash._root-3.0.1.tgz",
"integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==",
"license": "MIT"
},
"node_modules/lodash.escape": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/lodash.escape/-/lodash.escape-3.2.0.tgz",
"integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==",
"license": "MIT",
"dependencies": {
"lodash._root": "^3.0.0"
}
},
"node_modules/lodash.isarguments": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
"integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==",
"license": "MIT"
},
"node_modules/lodash.isarray": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
"integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==",
"license": "MIT"
},
"node_modules/lodash.isplainobject": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz",
"integrity": "sha512-P4wZnho5curNqeEq/x292Pb57e1v+woR7DJ84DURelKB46lby8aDEGVobSaYtzHdQBWQrJSdxcCwjlGOvvdIyg==",
"license": "MIT",
"dependencies": {
"lodash._basefor": "^3.0.0",
"lodash.isarguments": "^3.0.0",
"lodash.keysin": "^3.0.0"
}
},
"node_modules/lodash.istypedarray": {
"version": "3.0.6",
"resolved": "https://registry.npmmirror.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz",
"integrity": "sha512-lGWJ6N8AA3KSv+ZZxlTdn4f6A7kMfpJboeyvbFdE7IU9YAgweODqmOgdUHOA+c6lVWeVLysdaxciFXi+foVsWw==",
"license": "MIT"
},
"node_modules/lodash.keys": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/lodash.keys/-/lodash.keys-3.1.2.tgz",
"integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==",
"license": "MIT",
"dependencies": {
"lodash._getnative": "^3.0.0",
"lodash.isarguments": "^3.0.0",
"lodash.isarray": "^3.0.0"
}
},
"node_modules/lodash.keysin": {
"version": "3.0.8",
"resolved": "https://registry.npmmirror.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz",
"integrity": "sha512-YDB/5xkL3fBKFMDaC+cfGV00pbiJ6XoJIfRmBhv7aR6wWtbCW6IzkiWnTfkiHTF6ALD7ff83dAtB3OEaSoyQPg==",
"license": "MIT",
"dependencies": {
"lodash.isarguments": "^3.0.0",
"lodash.isarray": "^3.0.0"
}
},
"node_modules/lodash.merge": {
"version": "3.3.2",
"resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-3.3.2.tgz",
"integrity": "sha512-ZgGZpRhWLjivGUbjtApZR4HyLv/UAyoYqESVYkK4aLBJVHRrbFpG+GNnE9JPijliME4LkKM0SFI/WyOiBiv1+w==",
"license": "MIT",
"dependencies": {
"lodash._arraycopy": "^3.0.0",
"lodash._arrayeach": "^3.0.0",
"lodash._createassigner": "^3.0.0",
"lodash._getnative": "^3.0.0",
"lodash.isarguments": "^3.0.0",
"lodash.isarray": "^3.0.0",
"lodash.isplainobject": "^3.0.0",
"lodash.istypedarray": "^3.0.0",
"lodash.keys": "^3.0.0",
"lodash.keysin": "^3.0.0",
"lodash.toplainobject": "^3.0.0"
}
},
"node_modules/lodash.restparam": {
"version": "3.6.1",
"resolved": "https://registry.npmmirror.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
"integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==",
"license": "MIT"
},
"node_modules/lodash.toplainobject": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz",
"integrity": "sha512-wMI0Ju1bvSmnBS3EcRRH/3zDnZOPpDtMtNDzbbNMKuTrEpALsf+sPyMeogmv63Y11qZQO7H1xFzohIEGRMjPYA==",
"license": "MIT",
"dependencies": {
"lodash._basecopy": "^3.0.0",
"lodash.keysin": "^3.0.0"
}
},
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"license": "(MIT AND Zlib)"
}
}
}

5
package.json Normal file
View File

@ -0,0 +1,5 @@
{
"dependencies": {
"html-docx-js": "^0.3.1"
}
}

View File

@ -71,8 +71,8 @@ pub async fn run(pool: &MySqlPool) -> Result<(), sqlx::Error> {
id BIGINT AUTO_INCREMENT PRIMARY KEY,
compartment_id BIGINT NOT NULL,
cabinet_id BIGINT NOT NULL,
start_time TIMESTAMP,
end_time TIMESTAMP,
start_time TIMESTAMP NULL COMMENT '',
end_time TIMESTAMP NULL COMMENT '',
energy DECIMAL(10,2) COMMENT 'kWh',
max_temperature DECIMAL(5,1) COMMENT '',
status TINYINT DEFAULT 0 COMMENT '0 1 2',
@ -163,7 +163,7 @@ pub async fn run(pool: &MySqlPool) -> Result<(), sqlx::Error> {
progress INT DEFAULT 0 COMMENT '',
error_message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP,
completed_at TIMESTAMP NULL COMMENT '',
FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
"#;

View File

@ -33,34 +33,34 @@ pub fn build(state: AppState) -> Router {
.route("/api/auth/logout", post(auth::logout))
.route("/api/auth/me", get(auth::me))
// 设备指令下发
.route("/api/devices/:dev_id/command", post(crate::commands::send_command))
.route("/api/devices/{dev_id}/command", post(crate::commands::send_command))
.route("/api/devices/stats", get(crate::commands::device_stats))
// 节点管理
.route("/api/nodes/register", post(crate::nodes::register_node))
.route("/api/nodes/:node_id/heartbeat", post(crate::nodes::node_heartbeat))
.route("/api/nodes/:node_id/deregister", post(crate::nodes::deregister_node))
.route("/api/nodes/{node_id}/heartbeat", post(crate::nodes::node_heartbeat))
.route("/api/nodes/{node_id}/deregister", post(crate::nodes::deregister_node))
.route("/api/nodes", get(crate::nodes::list_nodes))
// 角色管理
.route("/api/roles", get(roles::list_roles).post(roles::create_role))
.route("/api/roles/:id", put(roles::update_role).delete(roles::delete_role))
.route("/api/roles/:id/permissions", put(roles::set_role_permissions))
.route("/api/roles/{id}", put(roles::update_role).delete(roles::delete_role))
.route("/api/roles/{id}/permissions", put(roles::set_role_permissions))
// 权限码列表
.route("/api/permissions", get(roles::list_permissions))
// 用户权限管理
.route("/api/users/:id/permissions", get(users_perm::get_user_permissions))
.route("/api/users/:id/roles", put(users_perm::set_user_roles))
.route("/api/users/:id/scopes", put(users_perm::set_user_scopes).get(users_perm::get_user_scopes))
.route("/api/users/{id}/permissions", get(users_perm::get_user_permissions))
.route("/api/users/{id}/roles", put(users_perm::set_user_roles))
.route("/api/users/{id}/scopes", put(users_perm::set_user_scopes).get(users_perm::get_user_scopes))
// 组织管理
.route("/api/organizations", get(organizations::list_organizations).post(organizations::create_organization))
.route("/api/organizations/:id", put(organizations::update_organization).delete(organizations::delete_organization))
.route("/api/organizations/{id}", put(organizations::update_organization).delete(organizations::delete_organization))
// 项目管理
.route("/api/organizations/:org_id/projects", get(projects::list_projects).post(projects::create_project))
.route("/api/projects/:id", put(projects::update_project).delete(projects::delete_project))
.route("/api/organizations/{org_id}/projects", get(projects::list_projects).post(projects::create_project))
.route("/api/projects/{id}", put(projects::update_project).delete(projects::delete_project))
// 设备管理
.route("/api/projects/:project_id/cabinets", get(cabinets::list_cabinets))
.route("/api/projects/{project_id}/cabinets", get(cabinets::list_cabinets))
.route("/api/cabinets", post(cabinets::create_cabinet))
.route("/api/cabinets/:id", put(cabinets::update_cabinet).delete(cabinets::delete_cabinet).get(cabinets::get_cabinet_detail))
.route("/api/cabinets/:id/regenerate-auth", post(cabinets::regenerate_auth))
.route("/api/cabinets/{id}", put(cabinets::update_cabinet).delete(cabinets::delete_cabinet).get(cabinets::get_cabinet_detail))
.route("/api/cabinets/{id}/regenerate-auth", post(cabinets::regenerate_auth))
// 组织树
.route("/api/organization-tree", get(cabinet_tree::organization_tree))
// 充电记录
@ -70,8 +70,8 @@ pub fn build(state: AppState) -> Router {
.route("/api/device-logs", get(device_logs::list_device_logs))
// 下载中心
.route("/api/downloads", get(downloads::list_downloads))
.route("/api/downloads/:id", get(downloads::get_download))
.route("/api/downloads/:id/file", get(downloads::download_file))
.route("/api/downloads/{id}", get(downloads::get_download))
.route("/api/downloads/{id}/file", get(downloads::download_file))
.route("/api/downloads/cleanup", post(downloads::cleanup_downloads))
// 设备级联下拉
.route("/api/cabinets/options", get(cabinets::list_cabinet_options))
@ -85,18 +85,18 @@ pub fn build(state: AppState) -> Router {
.route("/api/energy-stats/export", get(energy_stats::export_energy_stats))
// 用户管理
.route("/api/users", get(users::list_users).post(users::create_user))
.route("/api/users/:id", put(users::update_user).delete(users::delete_user))
.route("/api/users/:id/reset-password", put(users::reset_password))
.route("/api/users/:id/status", put(users::set_user_status))
.route("/api/users/{id}", put(users::update_user).delete(users::delete_user))
.route("/api/users/{id}/reset-password", put(users::reset_password))
.route("/api/users/{id}/status", put(users::set_user_status))
// 操作日志
.route("/api/operation-logs", get(operation_logs::list_operation_logs))
// H5 用户端接口(需认证)
.route("/api/h5/dashboard", get(h5::get_dashboard))
.route("/api/h5/projects", get(h5::get_projects))
.route("/api/h5/cabinets", get(h5::get_cabinets))
.route("/api/h5/cabinets/abstract/:abstract_id", get(h5::get_cabinet_by_abstract_id))
.route("/api/h5/cabinets/:id", get(h5::get_cabinet_detail))
.route("/api/h5/compartments/:id", get(h5::get_compartment_detail))
.route("/api/h5/cabinets/abstract/{abstract_id}", get(h5::get_cabinet_by_abstract_id))
.route("/api/h5/cabinets/{id}", get(h5::get_cabinet_detail))
.route("/api/h5/compartments/{id}", get(h5::get_compartment_detail))
.route("/api/h5/charge/start", post(h5::start_charge))
.route("/api/h5/charge/stop", post(h5::stop_charge))
.route("/api/h5/door/open", post(h5::open_door))

View File

@ -14,12 +14,15 @@ export interface ApiResponse<T = unknown> {
}
export class ApiError extends Error {
public code: number;
constructor(
public code: number,
code: number,
message: string,
) {
super(message);
this.name = 'ApiError';
this.code = code;
}
}

View File

@ -85,12 +85,12 @@ export default function AdminLayout() {
};
const dropList = (
<Dropdown.Menu>
<Dropdown.Item key="logout" onClick={handleLogout}>
<Menu>
<Menu.Item key="logout" onClick={handleLogout}>
<IconPoweroff style={{ marginRight: 8 }} />
退
</Dropdown.Item>
</Dropdown.Menu>
</Menu.Item>
</Menu>
);
return (
@ -122,14 +122,14 @@ export default function AdminLayout() {
>
{menuConfig.map((item) =>
item.children ? (
<Menu.SubMenu key={item.key} title={item.label} icon={item.icon}>
<Menu.SubMenu key={item.key} title={<>{item.icon}{item.label}</>}>
{item.children.map((child) => (
<Menu.Item key={child.key}>{child.label}</Menu.Item>
))}
</Menu.SubMenu>
) : (
<Menu.Item key={item.key} icon={item.icon}>
{item.label}
<Menu.Item key={item.key}>
{item.icon}{item.label}
</Menu.Item>
),
)}

View File

@ -243,8 +243,8 @@ export default function ChargeRecords() {
disabled={!cabinBoardId}
/>
<RangePicker
onChange={(_dateString, value) => {
setTimeRange(value as string[]);
onChange={(dateString) => {
setTimeRange(dateString as string[]);
}}
/>
<Button type="primary" icon={<IconSearch />} onClick={handleSearch}>
@ -271,7 +271,7 @@ export default function ChargeRecords() {
onChange: setPage,
showTotal: true,
}}
size="medium"
size="default"
/>
{/* 下载中心弹窗 */}

View File

@ -178,8 +178,8 @@ export default function DeviceLogs() {
options={LOG_TYPE_OPTIONS}
/>
<RangePicker
onChange={(_dateString, value) => {
setTimeRange(value as string[]);
onChange={(dateString) => {
setTimeRange(dateString as string[]);
}}
/>
<Button type="primary" icon={<IconSearch />} onClick={handleSearch}>
@ -200,7 +200,7 @@ export default function DeviceLogs() {
onChange: setPage,
showTotal: true,
}}
size="medium"
size="default"
/>
</Card>
);

View File

@ -4,14 +4,12 @@
* - //
*/
import { useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
import {
Layout,
Tree,
Typography,
Button,
Spin,
Message,
} from '@arco-design/web-react';
import {
IconFolder,
@ -19,8 +17,6 @@ import {
IconRefresh,
} from '@arco-design/web-react/icon';
import {
treeApi,
cabinetApi,
type TreeNode,
type Cabinet,
} from '@/api/devices';
@ -109,7 +105,6 @@ export default function OrganizationTree({
onReload,
onRightClick,
}: OrganizationTreeProps) {
const navigate = useNavigate();
/** 渲染树节点标题(带右键菜单) */
const renderNodeTitle = useCallback(
@ -170,7 +165,7 @@ export default function OrganizationTree({
selectedKeys={selectedKeys}
onSelect={onSelect as never}
autoExpandParent
defaultExpandAll
defaultExpandedKeys={['all']}
style={{ fontSize: 13 }}
/>
) : (

View File

@ -91,12 +91,6 @@ export default function Energy() {
const [loading, setLoading] = useState(true);
const [downloadVisible, setDownloadVisible] = useState(false);
// 柜子排行排序
const [cabinetSort, setCabinetSort] = useState<{
field: string;
direction: 'ascend' | 'descend';
}>({ field: 'today_energy', direction: 'descend' });
/** 加载总览 */
const fetchSummary = useCallback(async () => {
try {
@ -333,16 +327,7 @@ export default function Energy() {
columns={cabinetColumns}
data={cabinetRanking}
pagination={{ pageSize: 10, showTotal: true }}
size="medium"
defaultSort={cabinetSort}
onChange={(_, sorter) => {
if (sorter) {
setCabinetSort({
field: sorter.field as string,
direction: sorter.direction as 'ascend' | 'descend',
});
}
}}
size="default"
/>
</Card>
</Col>
@ -353,7 +338,7 @@ export default function Energy() {
columns={projectColumns}
data={projectStats}
pagination={{ pageSize: 10, showTotal: true }}
size="medium"
size="default"
/>
</Card>
</Col>
@ -401,7 +386,7 @@ export default function Energy() {
/>
<Tooltip
contentStyle={chartTooltipStyle}
formatter={(value: number) => [`${fmt(value)} kWh`, '能耗']}
formatter={(value) => [`${fmt(typeof value === 'number' ? value : 0)} kWh`, '能耗']}
/>
<Legend />
<Line
@ -442,7 +427,7 @@ export default function Energy() {
/>
<Tooltip
contentStyle={chartTooltipStyle}
formatter={(value: number) => [`${value}`, '充电次数']}
formatter={(value) => [`${value ?? 0}`, '充电次数']}
/>
<Legend />
<Bar

View File

@ -179,8 +179,9 @@ export default function OperationLogsPage() {
label: `${u.name || u.phone}`,
value: u.id,
}))}
// ponytail: Arco Select filterOption 的 option 参数类型为 ReactElement需要断言访问 label
filterOption={(input, option) =>
(option?.label ?? '').toLowerCase().includes(input.toLowerCase())
((option as { label?: string })?.label ?? '').toLowerCase().includes(input.toLowerCase())
}
/>
<Select
@ -191,9 +192,10 @@ export default function OperationLogsPage() {
onChange={(v) => setAction((v as string) || '')}
options={ACTION_OPTIONS.filter((o) => o.value !== '')}
/>
{/* RangePicker onChange 第一个参数即为 string[],无需从 Dayjs[] 转换 */}
<RangePicker
onChange={(_dateString, value) => {
setTimeRange(value as string[]);
onChange={(dateString) => {
setTimeRange(dateString);
}}
/>
<Button type="primary" icon={<IconSearch />} onClick={handleSearch}>
@ -217,7 +219,8 @@ export default function OperationLogsPage() {
onChange: setPage,
showTotal: true,
}}
size="medium"
// ponytail: Arco Table size 不支持 "medium",使用等效的 "default"
size="default"
/>
</Space>
</Card>

View File

@ -6,7 +6,7 @@
* -
*/
import { useCallback, useEffect, useState } from 'react';
import { useCallback, useEffect, useMemo, useState } from 'react';
import {
Button,
Card,
@ -21,7 +21,6 @@ import {
Tree,
Typography,
} from '@arco-design/web-react';
import type { TableColumnData, TreeNodeData } from '@arco-design/web-react';
import {
fetchPermissions,
fetchRoles,
@ -33,6 +32,16 @@ import {
import type { PermissionItem, Role } from '@/api/permission';
import { Permission } from '@/components/Permission';
/**
*
* @note Arco Design TreeNodeData
*/
interface TreeNodeData {
key: string;
title: string;
children?: TreeNodeData[];
}
/** 权限码按模块分组 */
const PERM_GROUPS: Record<string, string> = {
device: '设备管理',
@ -80,6 +89,8 @@ export default function RolesPage() {
/** 构建权限树数据 */
const treeData: TreeNodeData[] = buildPermTree(allPerms);
/** 默认展开所有父节点(替代已移除的 defaultExpandAll */
const defaultExpandedKeys = useMemo(() => treeData.map((n) => n.key), [treeData]);
/** 打开创建抽屉 */
const handleCreate = () => {
@ -139,7 +150,7 @@ export default function RolesPage() {
};
/** 表格列定义 */
const columns: TableColumnData<Role>[] = [
const columns = [
{ title: 'ID', dataIndex: 'id', width: 80 },
{ title: '角色名', dataIndex: 'name', width: 150 },
{ title: '描述', dataIndex: 'description' },
@ -209,7 +220,8 @@ export default function RolesPage() {
visible={drawerVisible}
onCancel={() => setDrawerVisible(false)}
onOk={handleSave}
okLoading={saving}
// ponytail: confirmLoading replaced okLoading in newer Arco Design API
confirmLoading={saving}
width={560}
>
<Form layout="vertical">
@ -234,7 +246,8 @@ export default function RolesPage() {
treeData={treeData}
checkedKeys={selectedPerms}
onCheck={(keys) => setSelectedPerms(keys as string[])}
defaultExpandAll
// ponytail: defaultExpandAll removed in newer Arco Design, use defaultExpandedKeys instead
defaultExpandedKeys={defaultExpandedKeys}
/>
</Form.Item>
</Form>

View File

@ -22,7 +22,8 @@ import {
Tag,
Typography,
} from '@arco-design/web-react';
import type { TableColumnData } from '@arco-design/web-react';
// Arco 2.x 中 TableColumnData 已移除,改用 TableColumnProps
import type { TableColumnProps } from '@arco-design/web-react';
import { IconSearch, IconRefresh } from '@arco-design/web-react/icon';
import {
fetchUsers,
@ -227,7 +228,7 @@ export default function UsersPage() {
};
/** 表格列 */
const columns: TableColumnData<User>[] = [
const columns: TableColumnProps<User>[] = [
{ title: '手机号', dataIndex: 'phone', width: 130 },
{ title: '姓名', dataIndex: 'name', width: 120, render: (v: string | null) => v || '-' },
{ title: '角色', dataIndex: 'role_text', width: 110 },
@ -315,7 +316,7 @@ export default function UsersPage() {
</Button>
</Space>
{/* 表格 */}
{/* 表格 — Arco 2.x size 不再接受 "medium",用 "default" 替代 */}
<Table
rowKey="id"
columns={columns}
@ -328,7 +329,7 @@ export default function UsersPage() {
onChange: setPage,
showTotal: true,
}}
size="medium"
size="default"
/>
</Space>

View File

@ -7,6 +7,7 @@
"types": ["vite/client"],
"allowArbitraryExtensions": true,
"skipLibCheck": true,
"ignoreDeprecations": "6.0",
/* Bundler mode */
"moduleResolution": "bundler",

29
生产环境.txt Normal file
View File

@ -0,0 +1,29 @@
阿里云
账号13951516272
密码wxad139
https://signin.aliyun.com/login.htm?username=skyp76%401086952030628727.onaliyun.com&defaultShowQrCode=false
mysql
r-bp1lsezvgzmgtwhbtg.redis.rds.aliyuncs.com password=Hbhyg731024@
redis
rm-bp1bb7yiv5n8z4uvp.mysql.rds.aliyuncs.com root;pwd=Hbhyg731024
正式环境
外网118.31.119.206
内网172.25.42.239
ZeroTier10.8.0.252
Hbhyg731024@
域名
test.anzhizhichong.com/pms/
app.anzhizhichong.com/pms/
备案
苏ICP备2025198376号-1
SSL
AccessKey IDLTAI5tAHZgDXRVx6SQcGDU2V
AccessKey SecretCIWKK4l8nRq8qUKz24ynjNQuMrUp73