fix: nginx配置修正Gitea路由 /doc/ 而非 /pms/doc/
This commit is contained in:
parent
4515021f37
commit
652bde44c4
11
.omo/run-continuation/ses_0e18e37d9ffegUbDkGCoIOjGFO.json
Normal file
11
.omo/run-continuation/ses_0e18e37d9ffegUbDkGCoIOjGFO.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
.omo/run-continuation/ses_0e19403caffeuYBymluO822Agr.json
Normal file
11
.omo/run-continuation/ses_0e19403caffeuYBymluO822Agr.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
.omo/run-continuation/ses_0e1b1569fffe2oQDtzHgu4ghIp.json
Normal file
11
.omo/run-continuation/ses_0e1b1569fffe2oQDtzHgu4ghIp.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
.omo/run-continuation/ses_0e3ddd089ffeSaxAHykBGPJtrS.json
Normal file
11
.omo/run-continuation/ses_0e3ddd089ffeSaxAHykBGPJtrS.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
.omo/run-continuation/ses_0e5905b12ffefGBg8ADFu7rUlS.json
Normal file
11
.omo/run-continuation/ses_0e5905b12ffefGBg8ADFu7rUlS.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
.omo/run-continuation/ses_0e5b13196ffeIOuDn3eHC3nhoD.json
Normal file
10
.omo/run-continuation/ses_0e5b13196ffeIOuDn3eHC3nhoD.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
.omo/run-continuation/ses_0e5b145e8ffeu1nFUv6Ecijw7R.json
Normal file
11
.omo/run-continuation/ses_0e5b145e8ffeu1nFUv6Ecijw7R.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
.omo/run-continuation/ses_0e5c11c7dffeM9442HRyKNYgfw.json
Normal file
10
.omo/run-continuation/ses_0e5c11c7dffeM9442HRyKNYgfw.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
.omo/run-continuation/ses_0e5c16fa8ffeAkc8PLVdT6qmhN.json
Normal file
11
.omo/run-continuation/ses_0e5c16fa8ffeAkc8PLVdT6qmhN.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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-----
|
||||||
@ -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-----
|
||||||
@ -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-----
|
||||||
@ -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-----
|
||||||
@ -199,7 +199,7 @@ server {
|
|||||||
root /data/pms;
|
root /data/pms;
|
||||||
index index.html;
|
index index.html;
|
||||||
|
|
||||||
location /pms/doc/ {
|
location /doc/ {
|
||||||
proxy_pass http://127.0.0.1:3080/;
|
proxy_pass http://127.0.0.1:3080/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
|||||||
@ -16,7 +16,7 @@ server {
|
|||||||
root /data/pms;
|
root /data/pms;
|
||||||
index index.html;
|
index index.html;
|
||||||
|
|
||||||
location /pms/doc/ {
|
location /doc/ {
|
||||||
proxy_pass http://127.0.0.1:3080/;
|
proxy_pass http://127.0.0.1:3080/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
|||||||
191
package-lock.json
generated
Normal file
191
package-lock.json
generated
Normal 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
5
package.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"html-docx-js": "^0.3.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -71,8 +71,8 @@ pub async fn run(pool: &MySqlPool) -> Result<(), sqlx::Error> {
|
|||||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||||
compartment_id BIGINT NOT NULL,
|
compartment_id BIGINT NOT NULL,
|
||||||
cabinet_id BIGINT NOT NULL,
|
cabinet_id BIGINT NOT NULL,
|
||||||
start_time TIMESTAMP,
|
start_time TIMESTAMP NULL COMMENT '充电开始时间',
|
||||||
end_time TIMESTAMP,
|
end_time TIMESTAMP NULL COMMENT '充电结束时间',
|
||||||
energy DECIMAL(10,2) COMMENT '充电量kWh',
|
energy DECIMAL(10,2) COMMENT '充电量kWh',
|
||||||
max_temperature DECIMAL(5,1) COMMENT '最高温度',
|
max_temperature DECIMAL(5,1) COMMENT '最高温度',
|
||||||
status TINYINT DEFAULT 0 COMMENT '0正常 1异常 2手动停止',
|
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 '进度百分比',
|
progress INT DEFAULT 0 COMMENT '进度百分比',
|
||||||
error_message TEXT,
|
error_message TEXT,
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
completed_at TIMESTAMP,
|
completed_at TIMESTAMP NULL COMMENT '完成时间',
|
||||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
"#;
|
"#;
|
||||||
|
|||||||
@ -33,34 +33,34 @@ pub fn build(state: AppState) -> Router {
|
|||||||
.route("/api/auth/logout", post(auth::logout))
|
.route("/api/auth/logout", post(auth::logout))
|
||||||
.route("/api/auth/me", get(auth::me))
|
.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/devices/stats", get(crate::commands::device_stats))
|
||||||
// 节点管理
|
// 节点管理
|
||||||
.route("/api/nodes/register", post(crate::nodes::register_node))
|
.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}/heartbeat", post(crate::nodes::node_heartbeat))
|
||||||
.route("/api/nodes/:node_id/deregister", post(crate::nodes::deregister_node))
|
.route("/api/nodes/{node_id}/deregister", post(crate::nodes::deregister_node))
|
||||||
.route("/api/nodes", get(crate::nodes::list_nodes))
|
.route("/api/nodes", get(crate::nodes::list_nodes))
|
||||||
// 角色管理
|
// 角色管理
|
||||||
.route("/api/roles", get(roles::list_roles).post(roles::create_role))
|
.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}", put(roles::update_role).delete(roles::delete_role))
|
||||||
.route("/api/roles/:id/permissions", put(roles::set_role_permissions))
|
.route("/api/roles/{id}/permissions", put(roles::set_role_permissions))
|
||||||
// 权限码列表
|
// 权限码列表
|
||||||
.route("/api/permissions", get(roles::list_permissions))
|
.route("/api/permissions", get(roles::list_permissions))
|
||||||
// 用户权限管理
|
// 用户权限管理
|
||||||
.route("/api/users/:id/permissions", get(users_perm::get_user_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}/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}/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", 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/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/{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", 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}", 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}/regenerate-auth", post(cabinets::regenerate_auth))
|
||||||
// 组织树
|
// 组织树
|
||||||
.route("/api/organization-tree", get(cabinet_tree::organization_tree))
|
.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/device-logs", get(device_logs::list_device_logs))
|
||||||
// 下载中心
|
// 下载中心
|
||||||
.route("/api/downloads", get(downloads::list_downloads))
|
.route("/api/downloads", get(downloads::list_downloads))
|
||||||
.route("/api/downloads/:id", get(downloads::get_download))
|
.route("/api/downloads/{id}", get(downloads::get_download))
|
||||||
.route("/api/downloads/:id/file", get(downloads::download_file))
|
.route("/api/downloads/{id}/file", get(downloads::download_file))
|
||||||
.route("/api/downloads/cleanup", post(downloads::cleanup_downloads))
|
.route("/api/downloads/cleanup", post(downloads::cleanup_downloads))
|
||||||
// 设备级联下拉
|
// 设备级联下拉
|
||||||
.route("/api/cabinets/options", get(cabinets::list_cabinet_options))
|
.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/energy-stats/export", get(energy_stats::export_energy_stats))
|
||||||
// 用户管理
|
// 用户管理
|
||||||
.route("/api/users", get(users::list_users).post(users::create_user))
|
.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}", put(users::update_user).delete(users::delete_user))
|
||||||
.route("/api/users/:id/reset-password", put(users::reset_password))
|
.route("/api/users/{id}/reset-password", put(users::reset_password))
|
||||||
.route("/api/users/:id/status", put(users::set_user_status))
|
.route("/api/users/{id}/status", put(users::set_user_status))
|
||||||
// 操作日志
|
// 操作日志
|
||||||
.route("/api/operation-logs", get(operation_logs::list_operation_logs))
|
.route("/api/operation-logs", get(operation_logs::list_operation_logs))
|
||||||
// H5 用户端接口(需认证)
|
// H5 用户端接口(需认证)
|
||||||
.route("/api/h5/dashboard", get(h5::get_dashboard))
|
.route("/api/h5/dashboard", get(h5::get_dashboard))
|
||||||
.route("/api/h5/projects", get(h5::get_projects))
|
.route("/api/h5/projects", get(h5::get_projects))
|
||||||
.route("/api/h5/cabinets", get(h5::get_cabinets))
|
.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/abstract/{abstract_id}", get(h5::get_cabinet_by_abstract_id))
|
||||||
.route("/api/h5/cabinets/:id", get(h5::get_cabinet_detail))
|
.route("/api/h5/cabinets/{id}", get(h5::get_cabinet_detail))
|
||||||
.route("/api/h5/compartments/:id", get(h5::get_compartment_detail))
|
.route("/api/h5/compartments/{id}", get(h5::get_compartment_detail))
|
||||||
.route("/api/h5/charge/start", post(h5::start_charge))
|
.route("/api/h5/charge/start", post(h5::start_charge))
|
||||||
.route("/api/h5/charge/stop", post(h5::stop_charge))
|
.route("/api/h5/charge/stop", post(h5::stop_charge))
|
||||||
.route("/api/h5/door/open", post(h5::open_door))
|
.route("/api/h5/door/open", post(h5::open_door))
|
||||||
|
|||||||
@ -14,12 +14,15 @@ export interface ApiResponse<T = unknown> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class ApiError extends Error {
|
export class ApiError extends Error {
|
||||||
|
public code: number;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public code: number,
|
code: number,
|
||||||
message: string,
|
message: string,
|
||||||
) {
|
) {
|
||||||
super(message);
|
super(message);
|
||||||
this.name = 'ApiError';
|
this.name = 'ApiError';
|
||||||
|
this.code = code;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -85,12 +85,12 @@ export default function AdminLayout() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const dropList = (
|
const dropList = (
|
||||||
<Dropdown.Menu>
|
<Menu>
|
||||||
<Dropdown.Item key="logout" onClick={handleLogout}>
|
<Menu.Item key="logout" onClick={handleLogout}>
|
||||||
<IconPoweroff style={{ marginRight: 8 }} />
|
<IconPoweroff style={{ marginRight: 8 }} />
|
||||||
退出登录
|
退出登录
|
||||||
</Dropdown.Item>
|
</Menu.Item>
|
||||||
</Dropdown.Menu>
|
</Menu>
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -122,14 +122,14 @@ export default function AdminLayout() {
|
|||||||
>
|
>
|
||||||
{menuConfig.map((item) =>
|
{menuConfig.map((item) =>
|
||||||
item.children ? (
|
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) => (
|
{item.children.map((child) => (
|
||||||
<Menu.Item key={child.key}>{child.label}</Menu.Item>
|
<Menu.Item key={child.key}>{child.label}</Menu.Item>
|
||||||
))}
|
))}
|
||||||
</Menu.SubMenu>
|
</Menu.SubMenu>
|
||||||
) : (
|
) : (
|
||||||
<Menu.Item key={item.key} icon={item.icon}>
|
<Menu.Item key={item.key}>
|
||||||
{item.label}
|
{item.icon}{item.label}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
),
|
),
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -243,8 +243,8 @@ export default function ChargeRecords() {
|
|||||||
disabled={!cabinBoardId}
|
disabled={!cabinBoardId}
|
||||||
/>
|
/>
|
||||||
<RangePicker
|
<RangePicker
|
||||||
onChange={(_dateString, value) => {
|
onChange={(dateString) => {
|
||||||
setTimeRange(value as string[]);
|
setTimeRange(dateString as string[]);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<Button type="primary" icon={<IconSearch />} onClick={handleSearch}>
|
<Button type="primary" icon={<IconSearch />} onClick={handleSearch}>
|
||||||
@ -271,7 +271,7 @@ export default function ChargeRecords() {
|
|||||||
onChange: setPage,
|
onChange: setPage,
|
||||||
showTotal: true,
|
showTotal: true,
|
||||||
}}
|
}}
|
||||||
size="medium"
|
size="default"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* 下载中心弹窗 */}
|
{/* 下载中心弹窗 */}
|
||||||
|
|||||||
@ -178,8 +178,8 @@ export default function DeviceLogs() {
|
|||||||
options={LOG_TYPE_OPTIONS}
|
options={LOG_TYPE_OPTIONS}
|
||||||
/>
|
/>
|
||||||
<RangePicker
|
<RangePicker
|
||||||
onChange={(_dateString, value) => {
|
onChange={(dateString) => {
|
||||||
setTimeRange(value as string[]);
|
setTimeRange(dateString as string[]);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<Button type="primary" icon={<IconSearch />} onClick={handleSearch}>
|
<Button type="primary" icon={<IconSearch />} onClick={handleSearch}>
|
||||||
@ -200,7 +200,7 @@ export default function DeviceLogs() {
|
|||||||
onChange: setPage,
|
onChange: setPage,
|
||||||
showTotal: true,
|
showTotal: true,
|
||||||
}}
|
}}
|
||||||
size="medium"
|
size="default"
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -4,14 +4,12 @@
|
|||||||
* - 支持右键菜单(添加/编辑/删除)
|
* - 支持右键菜单(添加/编辑/删除)
|
||||||
*/
|
*/
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { useNavigate } from 'react-router-dom';
|
|
||||||
import {
|
import {
|
||||||
Layout,
|
Layout,
|
||||||
Tree,
|
Tree,
|
||||||
Typography,
|
Typography,
|
||||||
Button,
|
Button,
|
||||||
Spin,
|
Spin,
|
||||||
Message,
|
|
||||||
} from '@arco-design/web-react';
|
} from '@arco-design/web-react';
|
||||||
import {
|
import {
|
||||||
IconFolder,
|
IconFolder,
|
||||||
@ -19,8 +17,6 @@ import {
|
|||||||
IconRefresh,
|
IconRefresh,
|
||||||
} from '@arco-design/web-react/icon';
|
} from '@arco-design/web-react/icon';
|
||||||
import {
|
import {
|
||||||
treeApi,
|
|
||||||
cabinetApi,
|
|
||||||
type TreeNode,
|
type TreeNode,
|
||||||
type Cabinet,
|
type Cabinet,
|
||||||
} from '@/api/devices';
|
} from '@/api/devices';
|
||||||
@ -109,7 +105,6 @@ export default function OrganizationTree({
|
|||||||
onReload,
|
onReload,
|
||||||
onRightClick,
|
onRightClick,
|
||||||
}: OrganizationTreeProps) {
|
}: OrganizationTreeProps) {
|
||||||
const navigate = useNavigate();
|
|
||||||
|
|
||||||
/** 渲染树节点标题(带右键菜单) */
|
/** 渲染树节点标题(带右键菜单) */
|
||||||
const renderNodeTitle = useCallback(
|
const renderNodeTitle = useCallback(
|
||||||
@ -170,7 +165,7 @@ export default function OrganizationTree({
|
|||||||
selectedKeys={selectedKeys}
|
selectedKeys={selectedKeys}
|
||||||
onSelect={onSelect as never}
|
onSelect={onSelect as never}
|
||||||
autoExpandParent
|
autoExpandParent
|
||||||
defaultExpandAll
|
defaultExpandedKeys={['all']}
|
||||||
style={{ fontSize: 13 }}
|
style={{ fontSize: 13 }}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@ -91,12 +91,6 @@ export default function Energy() {
|
|||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [downloadVisible, setDownloadVisible] = useState(false);
|
const [downloadVisible, setDownloadVisible] = useState(false);
|
||||||
|
|
||||||
// 柜子排行排序
|
|
||||||
const [cabinetSort, setCabinetSort] = useState<{
|
|
||||||
field: string;
|
|
||||||
direction: 'ascend' | 'descend';
|
|
||||||
}>({ field: 'today_energy', direction: 'descend' });
|
|
||||||
|
|
||||||
/** 加载总览 */
|
/** 加载总览 */
|
||||||
const fetchSummary = useCallback(async () => {
|
const fetchSummary = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
@ -333,16 +327,7 @@ export default function Energy() {
|
|||||||
columns={cabinetColumns}
|
columns={cabinetColumns}
|
||||||
data={cabinetRanking}
|
data={cabinetRanking}
|
||||||
pagination={{ pageSize: 10, showTotal: true }}
|
pagination={{ pageSize: 10, showTotal: true }}
|
||||||
size="medium"
|
size="default"
|
||||||
defaultSort={cabinetSort}
|
|
||||||
onChange={(_, sorter) => {
|
|
||||||
if (sorter) {
|
|
||||||
setCabinetSort({
|
|
||||||
field: sorter.field as string,
|
|
||||||
direction: sorter.direction as 'ascend' | 'descend',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
</Col>
|
</Col>
|
||||||
@ -353,7 +338,7 @@ export default function Energy() {
|
|||||||
columns={projectColumns}
|
columns={projectColumns}
|
||||||
data={projectStats}
|
data={projectStats}
|
||||||
pagination={{ pageSize: 10, showTotal: true }}
|
pagination={{ pageSize: 10, showTotal: true }}
|
||||||
size="medium"
|
size="default"
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
</Col>
|
</Col>
|
||||||
@ -401,7 +386,7 @@ export default function Energy() {
|
|||||||
/>
|
/>
|
||||||
<Tooltip
|
<Tooltip
|
||||||
contentStyle={chartTooltipStyle}
|
contentStyle={chartTooltipStyle}
|
||||||
formatter={(value: number) => [`${fmt(value)} kWh`, '能耗']}
|
formatter={(value) => [`${fmt(typeof value === 'number' ? value : 0)} kWh`, '能耗']}
|
||||||
/>
|
/>
|
||||||
<Legend />
|
<Legend />
|
||||||
<Line
|
<Line
|
||||||
@ -442,7 +427,7 @@ export default function Energy() {
|
|||||||
/>
|
/>
|
||||||
<Tooltip
|
<Tooltip
|
||||||
contentStyle={chartTooltipStyle}
|
contentStyle={chartTooltipStyle}
|
||||||
formatter={(value: number) => [`${value} 次`, '充电次数']}
|
formatter={(value) => [`${value ?? 0} 次`, '充电次数']}
|
||||||
/>
|
/>
|
||||||
<Legend />
|
<Legend />
|
||||||
<Bar
|
<Bar
|
||||||
|
|||||||
@ -179,8 +179,9 @@ export default function OperationLogsPage() {
|
|||||||
label: `${u.name || u.phone}`,
|
label: `${u.name || u.phone}`,
|
||||||
value: u.id,
|
value: u.id,
|
||||||
}))}
|
}))}
|
||||||
|
// ponytail: Arco Select filterOption 的 option 参数类型为 ReactElement,需要断言访问 label
|
||||||
filterOption={(input, option) =>
|
filterOption={(input, option) =>
|
||||||
(option?.label ?? '').toLowerCase().includes(input.toLowerCase())
|
((option as { label?: string })?.label ?? '').toLowerCase().includes(input.toLowerCase())
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Select
|
<Select
|
||||||
@ -191,9 +192,10 @@ export default function OperationLogsPage() {
|
|||||||
onChange={(v) => setAction((v as string) || '')}
|
onChange={(v) => setAction((v as string) || '')}
|
||||||
options={ACTION_OPTIONS.filter((o) => o.value !== '')}
|
options={ACTION_OPTIONS.filter((o) => o.value !== '')}
|
||||||
/>
|
/>
|
||||||
|
{/* RangePicker onChange 第一个参数即为 string[],无需从 Dayjs[] 转换 */}
|
||||||
<RangePicker
|
<RangePicker
|
||||||
onChange={(_dateString, value) => {
|
onChange={(dateString) => {
|
||||||
setTimeRange(value as string[]);
|
setTimeRange(dateString);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<Button type="primary" icon={<IconSearch />} onClick={handleSearch}>
|
<Button type="primary" icon={<IconSearch />} onClick={handleSearch}>
|
||||||
@ -217,7 +219,8 @@ export default function OperationLogsPage() {
|
|||||||
onChange: setPage,
|
onChange: setPage,
|
||||||
showTotal: true,
|
showTotal: true,
|
||||||
}}
|
}}
|
||||||
size="medium"
|
// ponytail: Arco Table size 不支持 "medium",使用等效的 "default"
|
||||||
|
size="default"
|
||||||
/>
|
/>
|
||||||
</Space>
|
</Space>
|
||||||
</Card>
|
</Card>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
* - 权限树勾选(按模块分组)
|
* - 权限树勾选(按模块分组)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { useCallback, useEffect, useState } from 'react';
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
import {
|
import {
|
||||||
Button,
|
Button,
|
||||||
Card,
|
Card,
|
||||||
@ -21,7 +21,6 @@ import {
|
|||||||
Tree,
|
Tree,
|
||||||
Typography,
|
Typography,
|
||||||
} from '@arco-design/web-react';
|
} from '@arco-design/web-react';
|
||||||
import type { TableColumnData, TreeNodeData } from '@arco-design/web-react';
|
|
||||||
import {
|
import {
|
||||||
fetchPermissions,
|
fetchPermissions,
|
||||||
fetchRoles,
|
fetchRoles,
|
||||||
@ -33,6 +32,16 @@ import {
|
|||||||
import type { PermissionItem, Role } from '@/api/permission';
|
import type { PermissionItem, Role } from '@/api/permission';
|
||||||
import { Permission } from '@/components/Permission';
|
import { Permission } from '@/components/Permission';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 权限树节点数据类型
|
||||||
|
* @note Arco Design 未导出 TreeNodeData,此处自行定义
|
||||||
|
*/
|
||||||
|
interface TreeNodeData {
|
||||||
|
key: string;
|
||||||
|
title: string;
|
||||||
|
children?: TreeNodeData[];
|
||||||
|
}
|
||||||
|
|
||||||
/** 权限码按模块分组 */
|
/** 权限码按模块分组 */
|
||||||
const PERM_GROUPS: Record<string, string> = {
|
const PERM_GROUPS: Record<string, string> = {
|
||||||
device: '设备管理',
|
device: '设备管理',
|
||||||
@ -80,6 +89,8 @@ export default function RolesPage() {
|
|||||||
|
|
||||||
/** 构建权限树数据 */
|
/** 构建权限树数据 */
|
||||||
const treeData: TreeNodeData[] = buildPermTree(allPerms);
|
const treeData: TreeNodeData[] = buildPermTree(allPerms);
|
||||||
|
/** 默认展开所有父节点(替代已移除的 defaultExpandAll) */
|
||||||
|
const defaultExpandedKeys = useMemo(() => treeData.map((n) => n.key), [treeData]);
|
||||||
|
|
||||||
/** 打开创建抽屉 */
|
/** 打开创建抽屉 */
|
||||||
const handleCreate = () => {
|
const handleCreate = () => {
|
||||||
@ -139,7 +150,7 @@ export default function RolesPage() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** 表格列定义 */
|
/** 表格列定义 */
|
||||||
const columns: TableColumnData<Role>[] = [
|
const columns = [
|
||||||
{ title: 'ID', dataIndex: 'id', width: 80 },
|
{ title: 'ID', dataIndex: 'id', width: 80 },
|
||||||
{ title: '角色名', dataIndex: 'name', width: 150 },
|
{ title: '角色名', dataIndex: 'name', width: 150 },
|
||||||
{ title: '描述', dataIndex: 'description' },
|
{ title: '描述', dataIndex: 'description' },
|
||||||
@ -209,7 +220,8 @@ export default function RolesPage() {
|
|||||||
visible={drawerVisible}
|
visible={drawerVisible}
|
||||||
onCancel={() => setDrawerVisible(false)}
|
onCancel={() => setDrawerVisible(false)}
|
||||||
onOk={handleSave}
|
onOk={handleSave}
|
||||||
okLoading={saving}
|
// ponytail: confirmLoading replaced okLoading in newer Arco Design API
|
||||||
|
confirmLoading={saving}
|
||||||
width={560}
|
width={560}
|
||||||
>
|
>
|
||||||
<Form layout="vertical">
|
<Form layout="vertical">
|
||||||
@ -234,7 +246,8 @@ export default function RolesPage() {
|
|||||||
treeData={treeData}
|
treeData={treeData}
|
||||||
checkedKeys={selectedPerms}
|
checkedKeys={selectedPerms}
|
||||||
onCheck={(keys) => setSelectedPerms(keys as string[])}
|
onCheck={(keys) => setSelectedPerms(keys as string[])}
|
||||||
defaultExpandAll
|
// ponytail: defaultExpandAll removed in newer Arco Design, use defaultExpandedKeys instead
|
||||||
|
defaultExpandedKeys={defaultExpandedKeys}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Form>
|
</Form>
|
||||||
|
|||||||
@ -22,7 +22,8 @@ import {
|
|||||||
Tag,
|
Tag,
|
||||||
Typography,
|
Typography,
|
||||||
} from '@arco-design/web-react';
|
} 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 { IconSearch, IconRefresh } from '@arco-design/web-react/icon';
|
||||||
import {
|
import {
|
||||||
fetchUsers,
|
fetchUsers,
|
||||||
@ -227,7 +228,7 @@ export default function UsersPage() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** 表格列 */
|
/** 表格列 */
|
||||||
const columns: TableColumnData<User>[] = [
|
const columns: TableColumnProps<User>[] = [
|
||||||
{ title: '手机号', dataIndex: 'phone', width: 130 },
|
{ title: '手机号', dataIndex: 'phone', width: 130 },
|
||||||
{ title: '姓名', dataIndex: 'name', width: 120, render: (v: string | null) => v || '-' },
|
{ title: '姓名', dataIndex: 'name', width: 120, render: (v: string | null) => v || '-' },
|
||||||
{ title: '角色', dataIndex: 'role_text', width: 110 },
|
{ title: '角色', dataIndex: 'role_text', width: 110 },
|
||||||
@ -315,7 +316,7 @@ export default function UsersPage() {
|
|||||||
</Button>
|
</Button>
|
||||||
</Space>
|
</Space>
|
||||||
|
|
||||||
{/* 表格 */}
|
{/* 表格 — Arco 2.x size 不再接受 "medium",用 "default" 替代 */}
|
||||||
<Table
|
<Table
|
||||||
rowKey="id"
|
rowKey="id"
|
||||||
columns={columns}
|
columns={columns}
|
||||||
@ -328,7 +329,7 @@ export default function UsersPage() {
|
|||||||
onChange: setPage,
|
onChange: setPage,
|
||||||
showTotal: true,
|
showTotal: true,
|
||||||
}}
|
}}
|
||||||
size="medium"
|
size="default"
|
||||||
/>
|
/>
|
||||||
</Space>
|
</Space>
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
"types": ["vite/client"],
|
"types": ["vite/client"],
|
||||||
"allowArbitraryExtensions": true,
|
"allowArbitraryExtensions": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
|
"ignoreDeprecations": "6.0",
|
||||||
|
|
||||||
/* Bundler mode */
|
/* Bundler mode */
|
||||||
"moduleResolution": "bundler",
|
"moduleResolution": "bundler",
|
||||||
|
|||||||
BIN
换电柜用锂电池充电器1TN标准通信协议 - RS485 V1.0(1).pdf
Normal file
BIN
换电柜用锂电池充电器1TN标准通信协议 - RS485 V1.0(1).pdf
Normal file
Binary file not shown.
29
生产环境.txt
Normal file
29
生产环境.txt
Normal 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
|
||||||
|
ZeroTier:10.8.0.252
|
||||||
|
Hbhyg731024@
|
||||||
|
|
||||||
|
域名
|
||||||
|
test.anzhizhichong.com/pms/
|
||||||
|
app.anzhizhichong.com/pms/
|
||||||
|
|
||||||
|
备案
|
||||||
|
苏ICP备2025198376号-1
|
||||||
|
|
||||||
|
SSL
|
||||||
|
AccessKey ID:LTAI5tAHZgDXRVx6SQcGDU2V
|
||||||
|
AccessKey Secret:CIWKK4l8nRq8qUKz24ynjNQuMrUp73
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user