diff --git a/.omo/run-continuation/ses_0e18e37d9ffegUbDkGCoIOjGFO.json b/.omo/run-continuation/ses_0e18e37d9ffegUbDkGCoIOjGFO.json new file mode 100644 index 0000000..42b7a95 --- /dev/null +++ b/.omo/run-continuation/ses_0e18e37d9ffegUbDkGCoIOjGFO.json @@ -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" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0e19403caffeuYBymluO822Agr.json b/.omo/run-continuation/ses_0e19403caffeuYBymluO822Agr.json new file mode 100644 index 0000000..c8f6f95 --- /dev/null +++ b/.omo/run-continuation/ses_0e19403caffeuYBymluO822Agr.json @@ -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" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0e1b1569fffe2oQDtzHgu4ghIp.json b/.omo/run-continuation/ses_0e1b1569fffe2oQDtzHgu4ghIp.json new file mode 100644 index 0000000..8a5a61b --- /dev/null +++ b/.omo/run-continuation/ses_0e1b1569fffe2oQDtzHgu4ghIp.json @@ -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" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0e3ddd089ffeSaxAHykBGPJtrS.json b/.omo/run-continuation/ses_0e3ddd089ffeSaxAHykBGPJtrS.json new file mode 100644 index 0000000..ce8b600 --- /dev/null +++ b/.omo/run-continuation/ses_0e3ddd089ffeSaxAHykBGPJtrS.json @@ -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" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0e5905b12ffefGBg8ADFu7rUlS.json b/.omo/run-continuation/ses_0e5905b12ffefGBg8ADFu7rUlS.json new file mode 100644 index 0000000..d9d18c9 --- /dev/null +++ b/.omo/run-continuation/ses_0e5905b12ffefGBg8ADFu7rUlS.json @@ -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" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0e5b13196ffeIOuDn3eHC3nhoD.json b/.omo/run-continuation/ses_0e5b13196ffeIOuDn3eHC3nhoD.json new file mode 100644 index 0000000..3802931 --- /dev/null +++ b/.omo/run-continuation/ses_0e5b13196ffeIOuDn3eHC3nhoD.json @@ -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" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0e5b145e8ffeu1nFUv6Ecijw7R.json b/.omo/run-continuation/ses_0e5b145e8ffeu1nFUv6Ecijw7R.json new file mode 100644 index 0000000..624b91f --- /dev/null +++ b/.omo/run-continuation/ses_0e5b145e8ffeu1nFUv6Ecijw7R.json @@ -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" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0e5c11c7dffeM9442HRyKNYgfw.json b/.omo/run-continuation/ses_0e5c11c7dffeM9442HRyKNYgfw.json new file mode 100644 index 0000000..3bd3e75 --- /dev/null +++ b/.omo/run-continuation/ses_0e5c11c7dffeM9442HRyKNYgfw.json @@ -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" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0e5c16fa8ffeAkc8PLVdT6qmhN.json b/.omo/run-continuation/ses_0e5c16fa8ffeAkc8PLVdT6qmhN.json new file mode 100644 index 0000000..5521d84 --- /dev/null +++ b/.omo/run-continuation/ses_0e5c16fa8ffeAkc8PLVdT6qmhN.json @@ -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" + } + } +} \ No newline at end of file diff --git a/25831580_app.anzhizhichong.com_nginx/app.anzhizhichong.com.key b/25831580_app.anzhizhichong.com_nginx/app.anzhizhichong.com.key new file mode 100644 index 0000000..42f190e --- /dev/null +++ b/25831580_app.anzhizhichong.com_nginx/app.anzhizhichong.com.key @@ -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----- diff --git a/25831580_app.anzhizhichong.com_nginx/app.anzhizhichong.com.pem b/25831580_app.anzhizhichong.com_nginx/app.anzhizhichong.com.pem new file mode 100644 index 0000000..e6be953 --- /dev/null +++ b/25831580_app.anzhizhichong.com_nginx/app.anzhizhichong.com.pem @@ -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----- diff --git a/25831902_test.anzhizhichong.com_nginx/test.anzhizhichong.com.key b/25831902_test.anzhizhichong.com_nginx/test.anzhizhichong.com.key new file mode 100644 index 0000000..f6595a1 --- /dev/null +++ b/25831902_test.anzhizhichong.com_nginx/test.anzhizhichong.com.key @@ -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----- diff --git a/25831902_test.anzhizhichong.com_nginx/test.anzhizhichong.com.pem b/25831902_test.anzhizhichong.com_nginx/test.anzhizhichong.com.pem new file mode 100644 index 0000000..e4e4322 --- /dev/null +++ b/25831902_test.anzhizhichong.com_nginx/test.anzhizhichong.com.pem @@ -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----- diff --git a/AGENTS.md b/AGENTS.md index 6e45fb6..e109a58 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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; diff --git a/deploy/nginx/app.anzhizhichong.com.conf b/deploy/nginx/app.anzhizhichong.com.conf index 2330c37..ed4c956 100644 --- a/deploy/nginx/app.anzhizhichong.com.conf +++ b/deploy/nginx/app.anzhizhichong.com.conf @@ -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; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d0630b6 --- /dev/null +++ b/package-lock.json @@ -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)" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..290315e --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "html-docx-js": "^0.3.1" + } +} diff --git a/software/api-server/src/db/migrate.rs b/software/api-server/src/db/migrate.rs index 9057d0e..a13f713 100644 --- a/software/api-server/src/db/migrate.rs +++ b/software/api-server/src/db/migrate.rs @@ -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; "#; diff --git a/software/api-server/src/routes/mod.rs b/software/api-server/src/routes/mod.rs index 5088bba..ce1607b 100644 --- a/software/api-server/src/routes/mod.rs +++ b/software/api-server/src/routes/mod.rs @@ -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)) diff --git a/software/web/src/api/request.ts b/software/web/src/api/request.ts index 1c4f6d0..577e902 100644 --- a/software/web/src/api/request.ts +++ b/software/web/src/api/request.ts @@ -14,12 +14,15 @@ export interface ApiResponse { } export class ApiError extends Error { + public code: number; + constructor( - public code: number, + code: number, message: string, ) { super(message); this.name = 'ApiError'; + this.code = code; } } diff --git a/software/web/src/layouts/AdminLayout.tsx b/software/web/src/layouts/AdminLayout.tsx index 047bb26..6883816 100644 --- a/software/web/src/layouts/AdminLayout.tsx +++ b/software/web/src/layouts/AdminLayout.tsx @@ -85,12 +85,12 @@ export default function AdminLayout() { }; const dropList = ( - - + + 退出登录 - - + + ); return ( @@ -122,14 +122,14 @@ export default function AdminLayout() { > {menuConfig.map((item) => item.children ? ( - + {item.icon}{item.label}}> {item.children.map((child) => ( {child.label} ))} ) : ( - - {item.label} + + {item.icon}{item.label} ), )} diff --git a/software/web/src/pages/charge-records/index.tsx b/software/web/src/pages/charge-records/index.tsx index b0dec02..7927356 100644 --- a/software/web/src/pages/charge-records/index.tsx +++ b/software/web/src/pages/charge-records/index.tsx @@ -243,8 +243,8 @@ export default function ChargeRecords() { disabled={!cabinBoardId} /> { - setTimeRange(value as string[]); + onChange={(dateString) => { + setTimeRange(dateString as string[]); }} />