Commit 51b932d8 by lixinming

no message

parents
.idea
/out
/node_modules
/test
/public
/logs
/video
/files
*test*
*.logs
*.zip
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "启动程序",
"program": "${workspaceFolder}/src/main.ts",
"outFiles": [
"${workspaceFolder}/**/*.js"
]
}
]
}
\ No newline at end of file
{
"name": "screen",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@alicloud/dybaseapi": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/@alicloud/dybaseapi/-/dybaseapi-1.0.0.tgz",
"integrity": "sha512-4KEDgqES7IL60T/TWGSkLQkN6BYeHEw8smnPgac2J2MTES5v1ieCWvbLSuUUWi5SAXi7cydKoD4HUOmX7xwM+A==",
"requires": {
"@alicloud/pop-core": "^1.3.3"
}
},
"@alicloud/dysmsapi-2017-05-25": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/@alicloud/dysmsapi-2017-05-25/-/dysmsapi-2017-05-25-1.0.1.tgz",
"integrity": "sha512-CVX/Yl9ntwkAOHAZa3j2Y/Io+SlbETw/ILv4UPIDCEIQm/N0EEcN2OXF8cWCUvHeu7OgnFWZKhdJY5GsbjWHDA==",
"requires": {
"@alicloud/pop-core": "^1.5.1"
}
},
"@alicloud/mns": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/@alicloud/mns/-/mns-1.0.0.tgz",
"integrity": "sha512-SUJYM8+x3iPy6thIy5Wa/5lw7+RodeDDIPcI3QQ3bZPNCSq+yEC3jMtfVlS3vxGPq+dGjAysI9RGeM7NByeHlw==",
"requires": {
"debug": "^2.6.3",
"httpx": "^2.1.1",
"kitx": "^1.2.0",
"xml2js": "^0.4.17"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
}
}
},
"@alicloud/pop-core": {
"version": "1.7.13",
"resolved": "https://registry.npmmirror.com/@alicloud/pop-core/-/pop-core-1.7.13.tgz",
"integrity": "sha512-agzr4DU+aAGW7/2mp2hP1JcNJkn/zBS0jUGQt5etIASN0MVq1tMdudVqvWbExUG0mUouo/n2VgdnjOHjswvrlA==",
"requires": {
"debug": "^3.1.0",
"httpx": "^2.1.2",
"json-bigint": "^1.0.0",
"kitx": "^1.2.1",
"xml2js": "^0.5.0"
},
"dependencies": {
"xml2js": {
"version": "0.5.0",
"resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.5.0.tgz",
"integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
}
}
}
},
"@alicloud/sms-sdk": {
"version": "1.1.6",
"resolved": "https://registry.npmmirror.com/@alicloud/sms-sdk/-/sms-sdk-1.1.6.tgz",
"integrity": "sha512-jW5ROjpAtOrNFkZSXb8geJWzkgJ9ggnPx+ve+72eatu78/vad2emdZjRx43/xPqqhA9djRoU3xHQt2xFODiaMQ==",
"requires": {
"@alicloud/dybaseapi": "^1.0.0",
"@alicloud/dysmsapi-2017-05-25": "^1.0.1",
"@alicloud/mns": "^1.0.0-beta6",
"babel-runtime": "^6.26.0"
}
},
"@babel/runtime": {
"version": "7.22.10",
"resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.10.tgz",
"integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==",
"requires": {
"regenerator-runtime": "^0.14.0"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.14.0",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
"integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
}
}
},
"@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
},
"accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"requires": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
}
},
"adler-32": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.2.0.tgz",
"integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==",
"requires": {
"exit-on-epipe": "~1.0.1",
"printj": "~1.1.0"
}
},
"agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"requires": {
"debug": "4"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
"asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz",
"integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"requires": {
"safer-buffer": "~2.1.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
},
"async-limiter": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz",
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
},
"aws4": {
"version": "1.12.0",
"resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.12.0.tgz",
"integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
}
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"requires": {
"tweetnacl": "^0.14.3"
}
},
"bignumber.js": {
"version": "9.1.1",
"resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.1.1.tgz",
"integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig=="
},
"body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz",
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"requires": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
},
"dependencies": {
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
}
}
},
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw=="
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
"cfb": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
"integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
"requires": {
"adler-32": "~1.3.0",
"crc-32": "~1.2.0"
},
"dependencies": {
"adler-32": {
"version": "1.3.1",
"resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
"integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A=="
}
}
},
"charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz",
"integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
},
"codepage": {
"version": "1.15.0",
"resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
"integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz",
"integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
"requires": {
"mime-db": ">= 1.43.0 < 2"
}
},
"compression": {
"version": "1.7.4",
"resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz",
"integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
"requires": {
"accepts": "~1.3.5",
"bytes": "3.0.0",
"compressible": "~2.0.16",
"debug": "2.6.9",
"on-headers": "~1.0.2",
"safe-buffer": "5.1.2",
"vary": "~1.1.2"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
}
}
},
"content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"requires": {
"safe-buffer": "5.2.1"
},
"dependencies": {
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
}
}
},
"content-type": {
"version": "1.0.5",
"resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
},
"cookie": {
"version": "0.5.0",
"resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz",
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
"core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
},
"crc-32": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
},
"crypt": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz",
"integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"requires": {
"assert-plus": "^1.0.0"
}
},
"date-format": {
"version": "4.0.14",
"resolved": "https://registry.npmmirror.com/date-format/-/date-format-4.0.14.tgz",
"integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg=="
},
"debug": {
"version": "3.2.7",
"resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"requires": {
"ms": "^2.1.1"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
},
"destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
},
"exit-on-epipe": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
"integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
},
"express": {
"version": "4.18.2",
"resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz",
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"requires": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.1",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.2.0",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.7",
"qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
"serve-static": "1.15.0",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
}
}
},
"express-async-handler": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/express-async-handler/-/express-async-handler-1.2.0.tgz",
"integrity": "sha512-rCSVtPXRmQSW8rmik/AIb2P0op6l7r1fMW538yyvTMltCO4xQEWMmobfrIxN2V1/mVrgxB8Az3reYF6yUZw37w=="
},
"express-history-api-fallback": {
"version": "2.2.1",
"resolved": "https://registry.npmmirror.com/express-history-api-fallback/-/express-history-api-fallback-2.2.1.tgz",
"integrity": "sha512-swxwm3aP8vrOOvlzOdZvHlSZtJGwHKaY94J6AkrAgCTmcbko3IRwbkhLv2wKV1WeZhjxX58aLMpP3atDBnKuZg=="
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
}
}
},
"flatted": {
"version": "3.2.7",
"resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz",
"integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"formidable": {
"version": "1.2.6",
"resolved": "https://registry.npmmirror.com/formidable/-/formidable-1.2.6.tgz",
"integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ=="
},
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
"frac": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
},
"fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"get-intrinsic": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
"integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3"
}
},
"get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz",
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
"requires": {
"assert-plus": "^1.0.0"
}
},
"graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
},
"har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz",
"integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
},
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"requires": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"requires": {
"agent-base": "6",
"debug": "4"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"httpx": {
"version": "2.2.7",
"resolved": "https://registry.npmmirror.com/httpx/-/httpx-2.2.7.tgz",
"integrity": "sha512-Wjh2JOAah0pdczfqL8NC5378G7jMt0Zcpn8U+yyxAiejjlagzSTQgJHuVvka2VNPQlKfoGehYRc79WKq9E4gDw==",
"requires": {
"@types/node": "^14",
"debug": "^4.1.1"
},
"dependencies": {
"@types/node": {
"version": "14.18.54",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-14.18.54.tgz",
"integrity": "sha512-uq7O52wvo2Lggsx1x21tKZgqkJpvwCseBBPtX/nKQfpVlEsLOb11zZ1CRsWUKvJF0+lzuA9jwvA7Pr2Wt7i3xw=="
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
},
"json-bigint": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/json-bigint/-/json-bigint-1.0.0.tgz",
"integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
"requires": {
"bignumber.js": "^9.0.0"
}
},
"json-schema": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz",
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
},
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
"requires": {
"graceful-fs": "^4.1.6"
}
},
"jsprim": {
"version": "1.4.2",
"resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz",
"integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.4.0",
"verror": "1.10.0"
}
},
"kitx": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/kitx/-/kitx-1.3.0.tgz",
"integrity": "sha512-fhBqFlXd0GkKTB+8ayLfpzPUw+LHxZlPAukPNBD1Om7JMeInT+/PxCAf1yLagvD+VKoyWhXtJR68xQkX/a0wOQ=="
},
"log4js": {
"version": "6.9.1",
"resolved": "https://registry.npmmirror.com/log4js/-/log4js-6.9.1.tgz",
"integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
"requires": {
"date-format": "^4.0.14",
"debug": "^4.3.4",
"flatted": "^3.2.7",
"rfdc": "^1.3.0",
"streamroller": "^3.1.5"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"lru-cache": {
"version": "4.1.5",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz",
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
"md5": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz",
"integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
"requires": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"requires": {
"mime-db": "1.52.0"
}
},
"moment": {
"version": "2.29.4",
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
},
"node-fetch": {
"version": "2.6.12",
"resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.12.tgz",
"integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
"node-xlsx": {
"version": "0.16.2",
"resolved": "https://registry.npmmirror.com/node-xlsx/-/node-xlsx-0.16.2.tgz",
"integrity": "sha512-ZT3Y4Zg2BFC2UWdp9B/6x3GqrFL0Bf0cXKy9IyhcwlKbcDAf5GuPAPSqrWFQK68NIpfTNA1Kr/NNjpwYxUgHTA==",
"requires": {
"@babel/runtime": "^7.14.6",
"buffer-from": "^1.1.1",
"xlsx": "^0.17.0"
}
},
"nodemailer": {
"version": "6.9.4",
"resolved": "https://registry.npmmirror.com/nodemailer/-/nodemailer-6.9.4.tgz",
"integrity": "sha512-CXjQvrQZV4+6X5wP6ZIgdehJamI63MFoYFGGPtHudWym9qaEHDNdPzaj5bfMCvxG1vhAileSWW90q7nL0N36mA=="
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz",
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
},
"on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"requires": {
"ee-first": "1.1.1"
}
},
"on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"opentype.js": {
"version": "0.7.3",
"resolved": "https://registry.npmmirror.com/opentype.js/-/opentype.js-0.7.3.tgz",
"integrity": "sha512-Veui5vl2bLonFJ/SjX/WRWJT3SncgiZNnKUyahmXCc2sa1xXW15u3R/3TN5+JFiP7RsjK5ER4HA5eWaEmV9deA==",
"requires": {
"tiny-inflate": "^1.0.2"
}
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
},
"printj": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/printj/-/printj-1.1.2.tgz",
"integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
},
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"requires": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
},
"psl": {
"version": "1.9.0",
"resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
"integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
},
"punycode": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz",
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
},
"qs": {
"version": "6.11.2",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz",
"integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
"requires": {
"side-channel": "^1.0.4"
}
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.5.1",
"resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"requires": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"dependencies": {
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
}
}
},
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
},
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.3",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"dependencies": {
"qs": {
"version": "6.5.3",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
"integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
}
}
},
"rfdc": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz",
"integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"send": {
"version": "0.18.0",
"resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"requires": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
"on-finished": "2.4.1",
"range-parser": "~1.2.1",
"statuses": "2.0.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
},
"dependencies": {
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
}
}
}
}
},
"serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
}
},
"setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
}
},
"ssf": {
"version": "0.11.2",
"resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz",
"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
"requires": {
"frac": "~1.1.2"
}
},
"sshpk": {
"version": "1.17.0",
"resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz",
"integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
}
},
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
"streamroller": {
"version": "3.1.5",
"resolved": "https://registry.npmmirror.com/streamroller/-/streamroller-3.1.5.tgz",
"integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
"requires": {
"date-format": "^4.0.14",
"debug": "^4.3.4",
"fs-extra": "^8.1.0"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"svg-captcha": {
"version": "1.4.0",
"resolved": "https://registry.npmmirror.com/svg-captcha/-/svg-captcha-1.4.0.tgz",
"integrity": "sha512-/fkkhavXPE57zRRCjNqAP3txRCSncpMx3NnNZL7iEoyAtYwUjPhJxW6FQTQPG5UPEmCrbFoXS10C3YdJlW7PDg==",
"requires": {
"opentype.js": "^0.7.3"
}
},
"tencentcloud-sdk-nodejs": {
"version": "4.0.667",
"resolved": "https://registry.npmmirror.com/tencentcloud-sdk-nodejs/-/tencentcloud-sdk-nodejs-4.0.667.tgz",
"integrity": "sha512-JBLHSlZuz/FRIVtOszvbEE90zG8UmslBLwGrKYq0mKvKiNLiidaSpFcRZjvnJ5Y0YcOuQ7WceLb9FPxvEF11ww==",
"requires": {
"form-data": "^3.0.0",
"get-stream": "^6.0.0",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.2.0",
"tslib": "1.13.0"
},
"dependencies": {
"form-data": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz",
"integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
}
}
},
"tiny-inflate": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
"integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
},
"toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
},
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
}
},
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
},
"tslib": {
"version": "1.13.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.13.0.tgz",
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
}
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
},
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"requires": {
"punycode": "^2.1.0"
}
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz",
"integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"wmf": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
},
"word": {
"version": "0.3.0",
"resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz",
"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
},
"ws": {
"version": "5.2.3",
"resolved": "https://registry.npmmirror.com/ws/-/ws-5.2.3.tgz",
"integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==",
"requires": {
"async-limiter": "~1.0.0"
}
},
"xlsx": {
"version": "0.17.5",
"resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.17.5.tgz",
"integrity": "sha512-lXNU0TuYsvElzvtI6O7WIVb9Zar1XYw7Xb3VAx2wn8N/n0whBYrCnHMxtFyIiUU1Wjf09WzmLALDfBO5PqTb1g==",
"requires": {
"adler-32": "~1.2.0",
"cfb": "^1.1.4",
"codepage": "~1.15.0",
"crc-32": "~1.2.0",
"ssf": "~0.11.2",
"wmf": "~1.0.1",
"word": "~0.3.0"
}
},
"xml2js": {
"version": "0.4.23",
"resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz",
"integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
}
},
"xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
}
}
}
{
"name": "screen",
"version": "1.0.0",
"description": "",
"main": "main.ts",
"dependencies": {
"@alicloud/sms-sdk": "^1.1.6",
"@types/node": "^10.12.18",
"compression": "^1.7.4",
"express": "^4.17.1",
"express-async-handler": "^1.1.4",
"express-history-api-fallback": "^2.2.1",
"formidable": "^1.2.1",
"log4js": "^6.6.1",
"lru-cache": "^4.1.5",
"md5": "^2.2.1",
"moment": "^2.24.0",
"node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1",
"qs": "^6.11.0",
"request": "^2.88.0",
"svg-captcha": "^1.3.12",
"tencentcloud-sdk-nodejs": "^4.0.562",
"ws": "^5.2.2",
"xml2js": "^0.4.23"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "cjj",
"license": "ISC",
"bin": "./out/main.js",
"pkg": {
"scripts": "out/**/*.js",
"assets": [
"public/**/*",
"res/**/*",
"images/**/*",
"video/**/*"
],
"outputPath": "dist"
}
}
<config>
<port>40003</port>
<db>
<url>http://127.0.0.1:40002</url>
<sign>xxx90909082fsdahfjosadjfpoiwausjorip2hjklrhn1ioud0u124rx0qwejfokasjfolksaujfoas</sign>
</db>
<imgUrl>http://123.207.147.179:40003/</imgUrl>
<fileIP>http://218.78.62.29:40004</fileIP>
</config>
\ No newline at end of file
/**
* ABI_智慧党建管理分析平台——党建分析
*/
import moment = require("moment");
import { OPERATIONALDATATYPE, TABLENAME } from "../../config/dbEnum";
import * as enums from "../../config/enum";
import { selectData } from "../../middleware/databaseSuccess";
/**
* 党建分析——左屏
* @returns {baseData:基本情况, ratio:男女占比, qualifications:学历情况, ageDistribution:年龄分布, partyExpenses:党费管理}
*/
export async function getLeftScreen() {
let baseData = {title:"基本情况", list:[]};
baseData.list.push(
{key:"支部", value:await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.支部表, {}, null)},
{key:"正式党员", value:await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, {etId:enums.ENTRYTYPE.正式党员}, null)},
{key:"预备党员", value:await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, {etId:enums.ENTRYTYPE.预备党员}, null)}
);
let male = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, {sex:enums.SEX.}, null);
let female = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, {sex:enums.SEX.}, null);
let ratio = {title:"男女占比", list:[{key:"男", value:male},{key:"女", value:female}]};
let qualifications = {title:"学历情况", list:[]};
for(let key in enums.DEGREE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
let levelOfEducation = enums.DEGREE[key];
let count = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, {levelOfEducation}, null);
qualifications.list.push({key:keyStr, value:count});
}
}
let ageDistribution = {title:"年龄分布", list:[]};
let ageDistributionMap = {
小于29: 0,
大于30小于39: 0,
大于40小于49: 0,
大于50: 0,
}
let 小于29 = {"birthDate": {"%gt%": moment().add(-29, 'y').format("YYYY-MM-DD HH:mm:ss")}};
ageDistributionMap.小于29 = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, 小于29, ["birthDate"]);
let 大于30小于39 = {"birthDate": {"%between%": [moment().add(-39, 'y').format("YYYY-MM-DD HH:mm:ss"), moment().add(-30, 'y').format("YYYY-MM-DD HH:mm:ss")]}};
ageDistributionMap.大于30小于39 = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, 大于30小于39, ["birthDate"]);
let 大于40小于49 = {"birthDate": {"%between%": [moment().add(-49, 'y').format("YYYY-MM-DD HH:mm:ss"), moment().add(-40, 'y').format("YYYY-MM-DD HH:mm:ss")]}};
ageDistributionMap.大于40小于49 = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, 大于40小于49, ["birthDate"]);
let 大于50 = {"birthDate": {"%lt%": moment().add(-50, 'y').format("YYYY-MM-DD HH:mm:ss")}};
ageDistributionMap.大于50 = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, 大于50, ["birthDate"]);
for (let key in ageDistributionMap) {
ageDistribution.list.push({key, value: ageDistributionMap[key]});
}
let partyExpenses = {title:"党费管理", list: []};
let stTime = moment(new Date().valueOf()).startOf("month").format("YYYY-MM-DD HH:mm:ss");
let etTime = moment(new Date().valueOf()).endOf('month').format("YYYY-MM-DD HH:mm:ss");
let monthParam = {payType:enums.PAYTYPE.已缴纳, payTime:{"%between%":[stTime, etTime]}};
let monthPayment = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党费管理表, monthParam, ["payAmount"]);
let payAmount = 0;
monthPayment.forEach( item => {
payAmount += item.payAmount;
})
partyExpenses["monthPayment"] = payAmount;
let paymentCount = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, {}, null);
let paidCount = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党费管理表, {payType:enums.PAYTYPE.已缴纳}, null);
partyExpenses["paymentRatio"] = Math.round((paidCount / paymentCount)*100)/100;
for(let key in enums.BRANCHNAME) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
let bId = enums.BRANCHNAME[key];
let param = {
bId,
payType: enums.PAYTYPE.已缴纳,
payTime: {"%between%":[stTime, etTime]}
}
let branchPayment = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党费管理表, param, ["payAmount"]);
let branchPayAmount = 0;
branchPayment.forEach( item => {
branchPayAmount += item.payAmount;
})
partyExpenses.list.push({key:keyStr, value:branchPayAmount});
}
}
return {baseData, ratio, qualifications, ageDistribution, partyExpenses};
}
/**
* 党建分析——中屏
* @param year
* @returns {partyQualityList:党建质量雷达图, branchPartyQuality:各支部党建质量评分, buildingDynamic:党建动态}
*/
export async function getMidScreen(year:string) {
let clomun = ["primaryIndicators", "completionProgress"];
let partyQuality = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建质量三级指标, {dataYear:year}, clomun);
let indicatorsMap = {};
partyQuality.forEach( info => {
let {primaryIndicators, completionProgress} = info; //一级指标、完成进度
if (!indicatorsMap[primaryIndicators]) indicatorsMap[primaryIndicators] = {count:0, completionProgress:0};
indicatorsMap[primaryIndicators].completionProgress += completionProgress;
indicatorsMap[primaryIndicators].count += 1;
});
let partyQualityList = {title:"党建质量雷达图", list:[]};//list:[{key:一级指标名称,value:一级指标数量:0}]
for (let key in indicatorsMap) {
let {count, completionProgress} = indicatorsMap[key];
let keyStr = enums.PRIMARYINDICATORS[key];
partyQualityList.list.push({
key:keyStr,
value:Math.round((completionProgress / count)*100)/100
}
);
}
let branchPartyQuality = {title:"各支部党建质量评分", list:[]};
for(let key in enums.BRANCHNAME) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
let bId = enums.BRANCHNAME[key];
let branchPartyQualityInfo = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建质量三级指标, {bId}, ["currentScore"]);
let branchScore = 0;
branchPartyQualityInfo.forEach( item => {
branchScore += item.currentScore;
})
branchPartyQuality.list.push({key:keyStr, value:branchScore});
}
}
let buildingDynamic = {title:"党建动态", list:[]};
buildingDynamic.list = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建动态表, {}, ["theme"])
return {partyQualityList, branchPartyQuality, buildingDynamic};
}
/**
* 党建分析——右屏
* @returns {activity:组织生活, basicSystem:, totalIntegral, partyVanguard}
*/
export async function getRightScreen() {
let activity = {title:"组织生活", activityCount:0, list:[]}
activity.activityCount = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.组织生活表, {}, null); //组织生活总数
for(let key in enums.BRANCHNAME) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
let bId = enums.BRANCHNAME[key];
let count = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.组织生活表, {bId}, null);
activity.list.push({key:keyStr, value:count});
}
}
let basicSystem = {title:"基本制度", list:[]};
basicSystem.list = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.支部制度表, {}, ["systemTitle"]);
let totalIntegral = {title:"学习强国", monthTotalScore:0, list:[]};
let totalScore = 0;
for(let key in enums.BRANCHNAME) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
let bId = enums.BRANCHNAME[key];
let totalIntegralInfo = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.学习强国, {bId}, ["totalIntegral"]);
let changeScore = 0;
totalIntegralInfo.forEach(item => {
changeScore += item.totalIntegral;
totalScore += item.totalIntegral;
})
totalIntegral.list.push({key:keyStr, value:changeScore});
}
}
totalIntegral.monthTotalScore = totalScore;
let partyVanguard = {title:"党建先锋", list:[]};
let partyVanguardInfo = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建先锋表, {}, ["honorName", "grantTime"]);
partyVanguardInfo.forEach( item => {
let grantTime = moment(item.grantTime).format("YYYY-MM-DD");
partyVanguard.list.push({honorName:item.honorName, grantTime});
})
return {activity, basicSystem, totalIntegral, partyVanguard};
}
/**
* ABI_智慧党建管理分析平台——党建目标
*/
import { OPERATIONALDATATYPE, TABLENAME } from "../../config/dbEnum";
import { PRIMARYINDICATORS, SECONDARYINDICATORS } from "../../config/enum";
import { selectData } from "../../middleware/databaseSuccess";
import { changeEnumValue } from "../../util/verificationEnum";
export async function getTargetData() {
let clomun = ["tlId", "primaryIndicators", "secondaryIndicators", "thirdLevelContent", "thirdLevelScore", "currentScore", "completionProgress"];
let partyQualityData = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建质量三级指标, {}, clomun);
//todo优化一下 循环方式反了,参考partyBuilding 中的getMidScreen的写法
let partyQualityList = [];
for (let key in PRIMARYINDICATORS) {
let primaryIndicatorsData = {};
let anyKey:any = key;
if (isNaN(anyKey)) {
const EnumValue = parseInt(PRIMARYINDICATORS[key])
primaryIndicatorsData = {key: anyKey, list: {}};
partyQualityData.forEach( info => {
let {primaryIndicators, secondaryIndicators, thirdLevelContent, thirdLevelScore, currentScore, completionProgress} = info; //一级指标、总分、三级指标得分、完成进度
if (primaryIndicators == EnumValue) {
let secondary = changeEnumValue(SECONDARYINDICATORS, secondaryIndicators);
if(!primaryIndicatorsData["list"][secondary]) primaryIndicatorsData["list"][secondary] = []
primaryIndicatorsData["list"][secondary].push({
completionProgress
});
}
})
partyQualityList.push(primaryIndicatorsData);
}
}
let partyQuality = [];
partyQualityList.forEach( item => {
let {key, list} = item;
let secondLevel = [];
for (let second in list) {
let completionProgress = 0;
list[second].forEach( completion => {
completionProgress += completion.completionProgress;
})
completionProgress = completionProgress/list[second].length;
secondLevel.push({key:second, completionProgress})
}
partyQuality.push({key, dataList:secondLevel});
})
return partyQuality;
}
/**
* 首页基础数据
*/
import { changeEnumValue } from "../util/verificationEnum";
import * as configEnum from "../config/enum";
import * as clientConfigEnum from "../config/clientEnum";
import { extractData } from "../util/piecemeal";
import * as splitResultConfig from "../config/splitResultConfig";
import { selectData } from "../middleware/databaseSuccess";
import { OPERATIONALDATATYPE, TABLENAME } from "../config/dbEnum";
import moment = require("moment");
/**
* 主页基础数据
* @param bId 支部id
* @returns 支部名称:branch:"牙防所第一支部"
* @returns 党员总数:partyMemberNum:0
* @returns 党建质量总数:massSum:0
* @returns 党建质量指数:massIndex:0
* @returns 党内职务人员列表:partyPositions:[{"key":"支部书记", "list":["张三","李四"]}, {"key":"支部副书记", "list":["暂无数据"]}, ......]
*/
export async function homeData(bId:number) {
let branch = changeEnumValue(configEnum.BRANCHNAME, bId); //支部名称
let param = { bId };
let partyQualityScore = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建质量三级指标, param, ["thirdLevelScore", "currentScore"]);
let massIndex = 0;//得分
let massCount = 0;//总分
partyQualityScore.forEach( score => {
massCount += score.thirdLevelScore;
massIndex += score.currentScore;
});
let partyPositionsMap = {}; // = []; //党内职务人员 [{key, list:["", ""]}]
for (let key in clientConfigEnum.PARTYPOSITIONS) {
let anyKey:any = key;
if (isNaN(anyKey)) { //枚举key key = string
partyPositionsMap[anyKey] = {key:anyKey, list:[]}
}
}
let selectAllColumn = ["bId", "partyPositionsName", "name"];
let allMemberList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党员基础信息表, param, selectAllColumn);
let partyMemberNum = 0;//本支部人员总数
allMemberList.forEach(item => {
let { partyPositionsName, name} = item;
const ItemBId = item.bId;
if (ItemBId == bId) {
partyMemberNum += 1;
let partyPositionsList = getPartyPositionsList(JSON.parse(partyPositionsName));
partyPositionsList.forEach(positions => {
partyPositionsMap[positions].list.push(name);
});
}
});
let partyPositions = []; //党内职务人员 [{key, list:["", ""]}]
for (let key in partyPositionsMap ) {
let dataItem = partyPositionsMap[key];
if (!dataItem.list.length) dataItem.list.push("暂无数据");
partyPositions.push(dataItem)
}
return { branch, partyMemberNum, massSum:massCount, massIndex, partyPositions };
}
/**
* 职务人员数组数据转换
* @param numberList [100,101]
* @returns strList:["支部书记", "支部副书记" ]
*/
function getPartyPositionsList(numberList) {
let strList = [];
numberList.forEach(enumNum => {
let value = changeEnumValue(clientConfigEnum.PARTYPOSITIONS, enumNum);
if (value) strList.push(value);
});
return strList;
}
/**
* 查询党建资讯列表
* @param bId 支部id
* @returns 资讯列表:dataList:[返回字段参考splitResultConfig文件中的partyInformamtionConfig配置]
*/
export async function activitiesData(bId:number) {
let param = { bId };
let partyInformationList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.专题活动表, param, ["taId", "theme", "dataMonth"]);
let partyBuildingDynamicDataList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建动态表, param, ["pbId", "theme", "dataMonth"]);
let dataList = [];
partyInformationList.forEach( info => {
let changeData:any = extractData(splitResultConfig.partyInformationConfig, info);
changeData.dataMonth = new Date(info.dataMonth).valueOf();
changeData.pbType = configEnum.PBTYPE.党建资讯;
dataList.push(changeData);
})
partyBuildingDynamicDataList.forEach (info => {
let changeData:any = extractData(splitResultConfig.buildingDynamiconfig, info);
changeData.dataMonth = new Date(info.dataMonth).valueOf();
changeData.pbType = configEnum.PBTYPE.党建动态;
dataList.push(changeData);
})
dataList.sort( (a, b) => { return b["dataMonth"] - a["dataMonth"]; })
dataList.forEach( info => {
info.dataMonth = moment(info.dataMonth).format('YYYY-MM-DD');
})
return dataList;
}
/**
* 支部制度
*/
import { OPERATIONALDATATYPE, TABLENAME } from "../config/dbEnum";
import { UPTYPE } from "../config/enum";
import { ERRORENUM } from "../config/errorEnum";
import { systemConfig } from "../config/systemConfig";
import { selectData } from "../middleware/databaseSuccess";
import { getFileUrl } from "../middleware/getUrl";
import { BizError } from "../util/bizError";
/**
* 支部制度列表
* @param bId 支部id
* @param systemTitle 制度主题 可模糊查询
* @returns branchSystemList:[{"bsId":1, "systemTitle":"制度标题"}, ......]
*/
export async function branchSystemList(bId:number, systemTitle:string) {
let param = { bId:{"%like%": bId} };
if(systemTitle) param["systemTitle"] = {"%like%": systemTitle};
let branchSystemList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.支部制度表, param, ["bsId", "systemTitle"]);
branchSystemList = branchSystemList || [];
return branchSystemList;
}
/**
* 制度细则
* @param bsId 支部制度id
* @returns branchSystemInfo:{"bsId":1, "systemTitle":"制度标题", "fileName":["制度文件1", ......]}
*/
export async function branchSystemDetsils(bsId:number, token:string, userid:string) {
let clomun = ["bsId", "systemTitle", "fileName"];
let branchSystemInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.支部制度表, {bsId}, clomun);
if(!branchSystemInfo || !branchSystemInfo.bsId) throw new BizError(ERRORENUM.库中不存在对应数据, `制度细则中不存在id=${bsId}的数据`);
let fileNameList = getFileUrl(branchSystemInfo.fileName, token, UPTYPE.支部制度, userid);
branchSystemInfo.fileName = fileNameList;
return branchSystemInfo;
}
/**
* 党员学习 memberLearning
* 学习进度 rateLearning
* 学习排行 learningPower
*/
import { OPERATIONALDATATYPE, TABLENAME } from "../config/dbEnum";
import { operationalData, selectData, selectManyTableData } from "../middleware/databaseSuccess";
import moment = require("moment");
import * as verificationEnumTools from "../util/verificationEnum";
import * as configEnum from "../config/enum";
import { systemConfig } from "../config/systemConfig";
import { getFileUrl } from "../middleware/getUrl";
import { BizError } from "../util/bizError";
import { ERRORENUM } from "../config/errorEnum";
/**
* 获取党员课程学习列表
* @param pmId 登录的党员id
* @param courseEntryType 学习类型 视频/文字
* @param courseTypeName 课程类型
* @param contentTitle 课程标题
* @returns rateLearningList:[{"contentTitle":"学习课题名称", "fileName":["视频地址", ......], "rateOfLearning":0, "learningCompleted":0}]
*/
export async function memberLearningList(pmId:string, courseEntryType:number, courseTypeName:number, contentTitle:string, token:string, userid:string) {
let rateColumn = ["rlId", "mlId", "rateOfLearning", "learningCompleted", "textSchedule"];
let rateLearningInfo = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.学习进度表, {pmId}, rateColumn);
let rateLearningList = [];
let rateLearningMap = {};
rateLearningInfo.forEach(info => {
let {rlId, mlId, rateOfLearning, learningCompleted, textSchedule} = info;
rateLearningMap[mlId] = {rlId, rateOfLearning, learningCompleted, textSchedule};
});
let param = {courseEntryType};
if(courseTypeName) param["courseTypeName"] = courseTypeName;
if(contentTitle) param["contentTitle"] = {"%like%": contentTitle};
let clomun = ["mlId", "contentTitle", "fileName", "coverImage", "videoDuration", "courseEntryType"];
let memberLearningInfo = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党员学习表, param, clomun);
for(let i = 0; i < memberLearningInfo.length; i++) {
let memberInfo = memberLearningInfo[i];
let {mlId, contentTitle, fileName, coverImage, videoDuration} = memberInfo;
let learningInfo = rateLearningMap[mlId];
if (!learningInfo) { //如果对应学习课程没有进度数据,创建一条对应进度为0的数据
let addInfo = {
pmId,
mlId,
rateOfLearning:0,
learningCompleted: 1,
courseEntryType:'[]'
}
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.学习进度表, addInfo, {});
learningInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.学习进度表, {pmId, mlId}, rateColumn);
console.log(learningInfo);
}
let alanysisFileName;
let successFileList = [];//已完成
if (courseEntryType == 2) {
alanysisFileName = getFileUrl(fileName, token, configEnum.UPTYPE.党员学习 , userid);
successFileList = learningInfo.textSchedule ? JSON.parse(learningInfo.textSchedule) : [];
} else {
alanysisFileName = JSON.parse(fileName);
}
//todo 这里 fileName不再是一个字符串 而是一个对象{}
rateLearningList.push({
rlId: learningInfo.rlId,
contentTitle,
fileName: alanysisFileName,
rateOfLearning: learningInfo.rateOfLearning,
learningCompleted: learningInfo.learningCompleted,
coverImage,
videoDuration,
successFileList
})
}
return rateLearningList;
}
/**
* 学习排行
* 该用户支部的排名
* 展示数据最新月份的每日积分总和
* @param bId 支部id 参数存在返回数据最新月份登录账号支部的学习排行,参数不存在返回数据最新月份所有支部的学习排行
* @returns learningPowerList:[{"pmId":"党员id", "name":"党员名称", "bId":"所属支部", "dayIntegral":得分, "dataTime":"数据月份", "ranking":排名}]
* @returns oneselfRanking:{"pmId":"党员id", "name":"党员名称", "bId":"所属支部", "dayIntegral":得分, "dataTime":"数据月份", "ranking":排名}
*/
export async function branchRanking(pmId, bId?) {
let orderParam = {"%orderDesc%": "dataTime", "%limit%": 1};
let monthData = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.学习强国, orderParam, ["dataTime"]);
if (!monthData || !monthData.dataTime) return [];
let dataTime = monthData.dataTime;
let stTime = moment(dataTime).startOf("month").format("YYYY-MM-DD HH:mm:ss");
let etTime = moment(dataTime).endOf('month').format("YYYY-MM-DD HH:mm:ss");
let param = {
dataTime:{"%between%": [stTime, etTime]}
};
if (bId) param["bId"] = {"%like%": bId};
let clomun = ["pmId", "bId", "dayIntegral", "dataTime"];
let includeConf = {"partyMember":["name"]}
let learningPowerData = await selectManyTableData(OPERATIONALDATATYPE.多表联查, TABLENAME.学习强国, param, clomun, includeConf);
let partyMemberNameData = {}; //{成员名称:{pmId, bId, score, dataTime} }
learningPowerData.forEach( info => {
let {pmId, partyMember, bId, dayIntegral, dataTime} = info;
if (!partyMemberNameData[partyMember.name]) {
partyMemberNameData[partyMember.name] = {
pmId,
name:partyMember.name,
bId:verificationEnumTools.changeEnumValue(configEnum.BRANCHNAME, bId),
dayIntegral:0,
dataTime: moment(dataTime).format("YYYY-MM"),
};
}
partyMemberNameData[partyMember.name].dayIntegral += dayIntegral;
});
let learningPowerList = Object.values(partyMemberNameData);
learningPowerList.sort( (a:any, b:any) => {
return b.dayIntegral - a.dayIntegral;
});
let oneselfRanking = {};
for ( let i = 0; i < learningPowerList.length; i++) {
learningPowerList[i]["ranking"] = i + 1; //排名
if(learningPowerList[i]["pmId"] == pmId) {
oneselfRanking = learningPowerList[i];
}
}
return {learningPowerList, oneselfRanking};
}
/**
* 修改学习进度
* @param rlId 学习进度id
* @param rateOfLearning 学习进度
*/
export async function updateRateOfLearning(rlId:number, rateOfLearning:number) {
let learningCompleted = 1;
if (rateOfLearning == 100) learningCompleted = 2
let learningInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.学习进度表, {rlId}, ["rateOfLearning"]);
if (learningInfo.rateOfLearning < rateOfLearning) {
let row = await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.学习进度表, {rateOfLearning, learningCompleted}, {rlId});
console.log(row);
}
return {isSuccess:true};
}
export async function updateDocRateOfLearning(rlId:number, fileName:string) {
let rateLearningInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.学习进度表, {rlId}, ["pmId", "rlId", "textSchedule"]);
if (!rateLearningInfo || !rateLearningInfo.rlId) throw new BizError(ERRORENUM.目标数据不存在, `更新学习进度:rlid:${rlId}`);
let {pmId} = rateLearningInfo;
let learningInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.学习进度表, {pmId}, ["pmId", "mlId"]);
if (!learningInfo || !learningInfo.pmId) throw new BizError(ERRORENUM.目标数据不存在, `更新学习进度:pmId:${pmId}`);
let mlInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.党员学习表, {mlId:learningInfo.mlId}, ["courseEntryType"]);
if (mlInfo.courseEntryType != 2) throw new BizError(ERRORENUM.该进度不是文字学习, `${pmId}`);
let textSchedule = !rateLearningInfo.textSchedule ? [] : JSON.parse( rateLearningInfo.textSchedule);
let isUpdate = false;
if (textSchedule.indexOf(fileName) == -1) {
isUpdate = true;
textSchedule.push(fileName);
}
if (isUpdate) {
let row = await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.学习进度表, {textSchedule:JSON.stringify(textSchedule)}, {rlId});
console.log();
}
return {isSuccess:true};
}
/**
* 组织生活
*/
import moment = require("moment");
import { OPERATIONALDATATYPE, TABLENAME } from "../config/dbEnum";
import { ERRORENUM } from "../config/errorEnum";
import { selectData } from "../middleware/databaseSuccess";
import { BizError } from "../util/bizError";
import { extractData } from "../util/piecemeal";
import * as splitResultConfig from "../config/splitResultConfig";
import * as verificationEnumTools from "../util/verificationEnum";
import * as configEnum from "../config/enum";
import { getFileUrl } from "../middleware/getUrl";
/**
* 获取组织生活列表
* @param bId 支部id
* @param theme 活动名称 模糊查询
* @param themeType 活动类型
* @param dataMonth 活动月份
* @returns organizationalLifeList[{"oId":1, "theme":"活动主题", "themeType":"活动类型", "dataMonth":"活动月份"}]
*/
export async function organizationalLifeList(bId:number, theme:string, themeType:number, dataMonth:string) {
let param = { bId };
if (theme) param["theme"] = {"%like%": theme};
if (themeType) param["themeType"] = themeType;
if (dataMonth) {
let stTime = moment(dataMonth).startOf("month").format("YYYY-MM-DD HH:mm:ss");
let etTime = moment(dataMonth).endOf('month').format("YYYY-MM-DD HH:mm:ss");
param["dataMonth"] = {"%between%": [stTime, etTime]}; //`DATE_FORMAT(dataMonth, '%Y-%m') = DATE_FORMAT(${dataMonth}, '%Y-%m')`;
}
let clomun = ["oId", "theme", "themeType", "dataMonth"];
let organizationalLifeDataList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.组织生活表, param, clomun);
let organizationalLifeList = [];
organizationalLifeDataList.forEach( info => {
let changeData:any = extractData(splitResultConfig.organlzationalLifeConfig, info, "YYYY-MM-DD");
changeData.themeType = verificationEnumTools.changeEnumValue(configEnum.THEMETYPE, info.themeType);
organizationalLifeList.push(changeData);
})
return organizationalLifeList;
}
/**
* 获取组织生活详情
* @param oId 组织生活id
* @returns orgLifeInfo:{"oId":1, "theme":"活动主题", "themeType":"活动类型", "fileName":["活动文件名称", ......]}
*/
export async function organlzationalLifeListDetsils(oId:number, token:string, userid:string) {
let clomun = ["oId", "theme", "themeType", "dataMonth", "fileName"];
let orgLifeInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.组织生活表, {oId}, clomun);
if(!orgLifeInfo || !orgLifeInfo.oId) throw new BizError(ERRORENUM.未找到数据, `库中找不到id为${oId}的组织生活详情`);
orgLifeInfo.themeType = verificationEnumTools.changeEnumValue(configEnum.THEMETYPE, orgLifeInfo.themeType);
orgLifeInfo.dataMonth = moment(orgLifeInfo.dataMonth).format("YYYY-MM-DD");
orgLifeInfo.fileName = getFileUrl(orgLifeInfo.fileName, token, configEnum.UPTYPE.组织生活, userid);
return orgLifeInfo;
}
/**
* 党建动态 partyBuildingDynamic
*/
import { OPERATIONALDATATYPE, TABLENAME } from "../config/dbEnum";
import { selectData } from "../middleware/databaseSuccess";
import { extractData } from "../util/piecemeal";
import * as splitResultConfig from "../config/splitResultConfig";
import moment = require("moment");
import { PBTYPE, UPTYPE } from "../config/enum";
import { systemConfig } from "../config/systemConfig";
import { getFileUrl } from "../middleware/getUrl";
/**
* 获取党建动态列表
* @param bId
* @param theme 主题
* @param activityYear 年份
* @param activityMonth 月份
* @returns partyBuildingDynamicList:[{"pbId":1, "theme":"党建动态主题", "dataMonth":"数据月份"}, ......]
*/
export async function partyBuildingDynamicList(bId:number, theme:string, activityYear:string, activityMonth:string) {
let timeStr = new Date(`${activityYear}-${activityMonth}`).valueOf();
let stTime = moment(timeStr).startOf("month").format("YYYY-MM-DD HH:mm:ss");
let etTime = moment(timeStr).endOf('month').format("YYYY-MM-DD HH:mm:ss");
let param = {
bId,
dataMonth: {"%between%": [stTime, etTime]}
}
if(theme) param["theme"] = {"%like%":theme};
let partyBuildingDynamicList = [];
let partyInformationList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.专题活动表, param, ["taId", "theme", "dataMonth"]);
for (let i = 0; i < partyInformationList.length; i++) {
let info = partyInformationList[i];
let changeData:any = extractData(splitResultConfig.thematicActivitiesConfig, info, "YYYY-MM-DD");
changeData.pbType = PBTYPE.党建资讯;
partyBuildingDynamicList.push(changeData);
}
let buildingDynamicDataList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建动态表, param, ["pbId", "theme", "dataMonth"]);
for (let i = 0; i < buildingDynamicDataList.length; i++) {
let info = buildingDynamicDataList[i];
let changeData:any = extractData(splitResultConfig.partyBuildingDynamicConfig, info, "YYYY-MM-DD");
changeData.pbType = PBTYPE.党建动态;
partyBuildingDynamicList.push(changeData);
}
return partyBuildingDynamicList;
}
/**
* 获取党建动态详情
* @param pbId
* @returns partyBuildingDynamicInfo:{ "theme":"党建动态主题", "dataMonth":"数据月份", "fileName":["党建动态文件名称", ......] }
*/
export async function partyBuildingDynamicDetsils(pbId:number, pbType:number, token:string, userid:string) {
let clomun = ["theme", "dataMonth", "fileName"];
let partyBuildingDynamicInfo:any = {};
if (pbType == PBTYPE.党建资讯) partyBuildingDynamicInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.专题活动表, {taId: pbId}, clomun);
if (pbType == PBTYPE.党建动态) partyBuildingDynamicInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.党建动态表, {pbId}, clomun);
partyBuildingDynamicInfo.dataMonth = moment(partyBuildingDynamicInfo.dataMonth).format("YYYY-MM-DD");
let fileNameList = getFileUrl(partyBuildingDynamicInfo.fileName, token, UPTYPE.党建动态, userid);
partyBuildingDynamicInfo.fileName = fileNameList;
return partyBuildingDynamicInfo;
}
/**
* 党费管理
*/
import * as configEnum from "../config/enum";
import { selectData } from "../middleware/databaseSuccess";
import { OPERATIONALDATATYPE, TABLENAME } from "../config/dbEnum";
import moment = require("moment");
import { changeEnumValue } from "../util/verificationEnum";
/**
* 获取党费管理数据
* @param bId 支部id
* @param name 党员名称
* @param payType 缴纳状态
* @param payableYear 缴纳时间-年份
* @param payableMonth 缴纳时间-月份
* @returns 基础数据:"baseData": {"partyCount":党员总数, "paid":已缴纳人数, "unpaid":未缴纳人数}
* @returns 党费列表:"partyExpensesList": [{"name":"党员名称","payType":"缴纳状态","pmId":"党员id","payTime":"缴纳时间","partyPositionsName":"党内职务","departmentName":"所属科室","partyJoiningTime":"党龄"}, ......]
*/
export async function partyExpensesData(bId, name, payType, payableYear, payableMonth) {
let timeStr = new Date(`${payableYear}-${payableMonth}`).valueOf();
let stTime = moment(timeStr).startOf("month").format("YYYY-MM-DD HH:mm:ss");
let etTime = moment(timeStr).endOf('month').format("YYYY-MM-DD HH:mm:ss");
let param = {
bId,
payableMonth: {"%between%": [stTime, etTime]}
}
if(payType) param["payType"] = payType;
let clomun = ["pmId", "payType", "payTime"];
let partyExpensesDataList = await selectData(OPERATIONALDATATYPE.查询多个 , TABLENAME.党费管理表, param, clomun);
let expMap = {};//党费缴纳记录
partyExpensesDataList.forEach(info => {
let {pmId, payType, payTime} = info;
expMap[pmId] = {payType, payTime};
});
let partyExpensesList = [];
let memberParam = { etId: 1, bId: {"%like%": bId} };
if(name) memberParam["name"] = {"%like%": name};
let memberClomun = ["pmId", "etId", "name", "partyPositionsName", "departmentName", "partyJoiningTime"];
let partyMenberDataList = await selectData(OPERATIONALDATATYPE.查询多个 , TABLENAME.党员基础信息表, memberParam, memberClomun);
partyMenberDataList.forEach(info => {
let {name, etId, pmId, partyPositionsName, departmentName, partyJoiningTime} = info;
let expInfo = expMap[pmId];
if (expInfo) {
let payTime = "";
if(expInfo.payTime) payTime = moment(expInfo.payTime).format("YYYY-MM-DD");
let partyPositions = "";
switch(etId) {
case configEnum.ENTRYTYPE.正式党员:
partyPositions = changeEnumValue(configEnum.PARTYPOSITIONS, JSON.parse(partyPositionsName));
if (!partyPositions || partyPositions=='undefined') partyPositions = "党员";
break;
default: partyPositions = changeEnumValue(configEnum.ENTRYTYPE, etId);
}
partyExpensesList.push({
name,
payType:changeEnumValue(configEnum.PAYTYPE, expInfo.payType),
pmId,
payTime,
partyPositionsName: partyPositions, //党内职务
departmentName: changeEnumValue(configEnum.DEDPARTMENT, JSON.parse(departmentName)), //所属科室
partyJoiningTime: `${new Date().getFullYear() - parseInt(partyJoiningTime)}年` //党龄
});
}
});
let baseExpenses = await selectData(OPERATIONALDATATYPE.查询多个 , TABLENAME.党费管理表, {bId, payableMonth: {"%between%": [stTime, etTime]}}, clomun);
let baseExpMap = {};//党费缴纳记录
baseExpenses.forEach(info => {
let {pmId, payType, payTime} = info;
baseExpMap[pmId] = {payType, payTime};
});
let baseMember = await selectData(OPERATIONALDATATYPE.查询多个 , TABLENAME.党员基础信息表, {etId: 1, bId: {"%like%": bId}}, memberClomun);
let baseData = { //基础数据
partyCount:baseMember.length,//党员总数,
paid:0, // 已缴纳
unpaid:0 // 未缴纳
};
baseMember.forEach(info => {
let expInfo = baseExpMap[info.pmId];
if (!expInfo) expInfo = {payType:configEnum.PAYTYPE.未缴纳, payTime:timeStr}; //对应党员没有缴纳信息,返回一条该月未缴纳数据
if (expInfo.payType == configEnum.PAYTYPE.未缴纳) baseData.unpaid += 1;
if (expInfo.payType == configEnum.PAYTYPE.已缴纳) baseData.paid += 1;
});
return {baseData, partyExpensesList};
}
/**
* 党员基础信息
*/
import * as configEnum from "../config/enum";
import * as clientEnum from "../config/clientEnum";
import * as verificationEnumTools from "../util/verificationEnum";
import { extractData } from "../util/piecemeal";
import * as splitResultConfig from "../config/splitResultConfig";
import moment = require("moment");
import { OPERATIONALDATATYPE, TABLENAME } from "../config/dbEnum";
import { selectData, selectManyTableData } from "../middleware/databaseSuccess";
/**
* 获取党员名册
* @param branchId 支部id
* @returns 返回格式 {nameList:[返回字段参考splitResultConfig文件中的partyMemberConfig配置], partyMemberCount:{目前党员人数}}
*/
export async function partyMemberNameList(bId:number, name:string) {
let branchName = verificationEnumTools.changeEnumValue(configEnum.BRANCHNAME, bId);
let partyMemberNum = await selectData(OPERATIONALDATATYPE.查询数据量, TABLENAME.党员基础信息表, {bId:{"%like%":bId}}, []); //党员总数
let partyMemberCount = {
key: branchName + "目前党员人数",
value: partyMemberNum || 0
};
let param = {bId:{"%like%":bId}}
if (name) param["name"] = {"%like%":name};
let clomun = ["pmId", "name", "etId", "partyPositionsName", "partyJoiningTime", "departmentName"];
let partyMemberList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党员基础信息表, param, clomun);
let nameList = [];
/**截取返回字段 */
partyMemberList.forEach( info => {
let changeData:any = extractData(splitResultConfig.partyMemberConfig, info);
switch (changeData.etId) {
case configEnum.ENTRYTYPE.正式党员:
changeData.color = "#C62A23";
let partyPositions = JSON.parse(info.partyPositionsName);
changeData.partyPositionsName = verificationEnumTools.changeEnumValue(configEnum.PARTYPOSITIONS, partyPositions);
if (!changeData.partyPositionsName || changeData.partyPositionsName == "undefined") changeData.partyPositionsName = "党员";
break;
case configEnum.ENTRYTYPE.入党积极分子:
changeData.color = "#3549B0";
changeData.partyPositionsName = verificationEnumTools.changeEnumValue(configEnum.ENTRYTYPE, info.etId);
break;
case configEnum.ENTRYTYPE.预备党员:
changeData.color = "#E4B386";
changeData.partyPositionsName = verificationEnumTools.changeEnumValue(configEnum.ENTRYTYPE, info.etId);
break;
}
let time = moment(new Date()).format("YYYY");
let partyJoiningTime = time;
if (info.partyJoiningTime) partyJoiningTime = moment(info.partyJoiningTime).format("YYYY")
changeData.partyStanding = parseInt(time) - parseInt(partyJoiningTime) + "年";
let departmentName = JSON.parse(changeData.departmentName);
changeData.departmentName = verificationEnumTools.changeEnumValue(configEnum.DEDPARTMENT, departmentName);
nameList.push(changeData);
})
return {nameList, partyMemberCount};
}
/**
* 党员详情
* @param pmId 党员id
* @returns changeData:{返回字段参考splitResultConfig文件中的partyMemberDetailsConfig配置} 根据党员id返回党员详细信息
*/
export async function partyMemberDetails(bId:number, pmId:string) {
let clomun = ["bId", "pmId", "etId", "name", "sex", "birthDate", "phone", "levelOfEducation", "bId", "partyPositionsName", "partyJoiningTime", "administrativePositionName",
"departmentName", "askForTime", "listedAsActivistsTime", "liaison", "talkTime", "partyState"]
let partyMemberList = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.党员基础信息表, {pmId}, clomun);
let changeData:any = {};
/**截取返回字段 */
switch (partyMemberList.etId) {
case configEnum.ENTRYTYPE.正式党员:
changeData = extractData(splitResultConfig.partyMemberDetailsConfig, partyMemberList, "YYYY-MM-DD");
changeData.color = "#C62A23";
if(partyMemberList.partyPositionsName) changeData.partyPositionsName = verificationEnumTools.changeEnumValue(configEnum.PARTYPOSITIONS, JSON.parse(partyMemberList.partyPositionsName));
if(!changeData.partyPositionsName || changeData.partyPositionsName == "undefined") changeData.partyPositionsName = "党员";
break;
case configEnum.ENTRYTYPE.入党积极分子:
changeData = extractData(splitResultConfig.activistDetailsConfig, partyMemberList, "YYYY-MM-DD");
changeData.color = "#3549B0";
changeData.partyPositionsName = verificationEnumTools.changeEnumValue(configEnum.ENTRYTYPE, partyMemberList.etId);
break;
case configEnum.ENTRYTYPE.预备党员:
changeData = extractData(splitResultConfig.prepareDetailsConfig, partyMemberList, "YYYY-MM-DD");
changeData.color = "#E4B386";
changeData.partyPositionsName = verificationEnumTools.changeEnumValue(configEnum.ENTRYTYPE, partyMemberList.etId);
changeData.branchName = verificationEnumTools.changeEnumValue(configEnum.BRANCHNAME, partyMemberList.bId);
break;
}
changeData.departmentName = verificationEnumTools.changeEnumValue(configEnum.DEDPARTMENT, JSON.parse(partyMemberList.departmentName));
changeData.sex = verificationEnumTools.changeEnumValue(configEnum.SEX, partyMemberList.sex);
changeData.administrativePositionName = verificationEnumTools.changeEnumValue(configEnum.ADMINISTRATIVEPOSITION, partyMemberList.administrativePositionName);
changeData.partyState = verificationEnumTools.changeEnumValue(configEnum.PARTYSTATE, partyMemberList.partyState);
changeData.levelOfEducation = verificationEnumTools.changeEnumValue(configEnum.DEGREE, partyMemberList.levelOfEducation);
changeData.study = await getStudent(bId, pmId); //学习相关数据
let time = moment(new Date()).format("YYYY");
let partyJoiningTime = time;
if (changeData.partyJoiningTime) partyJoiningTime = moment(partyMemberList.partyJoiningTime).format("YYYY")
changeData.partyStanding = parseInt(time) - parseInt(partyJoiningTime) + "年";
return changeData;
}
/**
* 党员学习数据
* @param bId 支部
* @param pmId 党员
* @returns studentData:[{key:"学习排名", value:0},{key:"学习课时", value:0},{key:"学习进度", value:0}]
*/
export async function getStudent(bId:number, pmId:string) {
let orderParam = {"%orderDesc%": "dataTime", "%limit%": 1};
let monthData = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.学习强国, orderParam, ["dataTime"]);
if (!monthData || !monthData.dataTime) return [];
let dataTime = monthData.dataTime;
let stTime = moment(dataTime).startOf("month").format("YYYY-MM-DD HH:mm:ss");
let etTime = moment(dataTime).endOf('month').format("YYYY-MM-DD HH:mm:ss");
let param = {
dataTime:{"%between%": [stTime, etTime]}
};
if (bId) param["bId"] = {"%like%": bId};
let clomun = ["pmId", "bId", "dayIntegral", "dataTime"];
let includeConf = {"partyMember":["name"]}
let learningPowerData = await selectManyTableData(OPERATIONALDATATYPE.多表联查, TABLENAME.学习强国, param, clomun, includeConf);
let partyMemberNameData = {};
learningPowerData.forEach( info => {
let {pmId, partyMember, bId, dayIntegral, dataTime} = info;
if (!partyMemberNameData[partyMember.name]) {
partyMemberNameData[partyMember.name] = {
pmId,
name:partyMember.name,
bId:verificationEnumTools.changeEnumValue(configEnum.BRANCHNAME, bId),
dayIntegral:0,
dataTime: moment(dataTime).format("YYYY-MM"),
};
}
partyMemberNameData[partyMember.name].dayIntegral += dayIntegral;
});
let learningPowerList = Object.values(partyMemberNameData);
learningPowerList.sort( (a:any, b:any) => {
return b.dayIntegral - a.dayIntegral;
});
for ( let i = 0; i < learningPowerList.length; i++) {
learningPowerList[i]["ranking"] = i + 1;
}
let studentData:any = [{key: "学习排名", value: 0}];
let rateLearningData = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.学习进度表, {pmId}, ["mlId", "pmId", "rateOfLearning", "learningCompleted"]);
let memberLearningData = {rateOfLearning:0};
for (let i = 0; i < rateLearningData.length; i++) {
let rateLearning = rateLearningData[i];
let { rateOfLearning } = rateLearning;
memberLearningData.rateOfLearning += rateOfLearning;
}
let learningHours = rateLearningData.length || 0;
let rateOfLearning = memberLearningData.rateOfLearning / rateLearningData.length || 0;
studentData.push(
{key:"学习课时", value: learningHours},
{key:"学习进度", value: Math.round(rateOfLearning)}
);
return studentData;
}
/**
* 党建质量指数
*/
import * as configEnum from "../config/enum";
import { selectData } from "../middleware/databaseSuccess";
import { OPERATIONALDATATYPE, TABLENAME } from "../config/dbEnum";
import * as verificationEnumTools from "../util/verificationEnum";
import moment = require("moment");
/**
* 党建质量指数列表
* @param bId 支部id
* @returns [{"dataList":{"key":"一级指标名称","list":{"totalScore":0,"completionProgress":}}}]
*/
export async function partyQualityList(bId:number) {
let dataYear = moment(new Date().valueOf()).format("YYYY");
let clomun = ["tlId", "primaryIndicators", "secondaryIndicators", "thirdLevelContent", "thirdLevelScore", "currentScore", "completionProgress"];
let partyQualityData = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建质量三级指标, {bId:{"%like%": bId}, dataYear}, clomun);
let partyQualityList = [];
for (let key in configEnum.PRIMARYINDICATORS) {
let primaryIndicatorsData = {};
let anyKey:any = key;
if (isNaN(anyKey)) {
const EnumValue = parseInt(configEnum.PRIMARYINDICATORS[key])
primaryIndicatorsData["dataList"] = {key: anyKey, list: []};
primaryIndicatorsData["detail"] = {};
partyQualityData.forEach( info => {
let schedule = "进行中";
let {tlId, primaryIndicators, secondaryIndicators, thirdLevelContent, thirdLevelScore, currentScore, completionProgress} = info; //一级指标、总分、三级指标得分、完成进度
if (completionProgress == 100) schedule = "已完成"
if (primaryIndicators == EnumValue) {
primaryIndicatorsData["dataList"]["list"].push({
primaryIndicators,
thirdLevelScore,
currentScore,
completionProgress,
schedule
});
let secondary = verificationEnumTools.changeEnumValue(configEnum.SECONDARYINDICATORS, secondaryIndicators);
if(!primaryIndicatorsData["detail"][secondary]) primaryIndicatorsData["detail"][secondary] = {schedule, dataList: []};
if (thirdLevelScore != currentScore) primaryIndicatorsData["detail"][secondary]["schedule"] = "进行中";
primaryIndicatorsData["detail"][secondary]["dataList"].push({
thirdLevelContent,
thirdLevelScore,
});
}
})
partyQualityList.push(primaryIndicatorsData);
}
}
let partyQuality = [];
partyQualityList.forEach( item => {
let {dataList, detail} = item;
let {key, list} = dataList;
let count = list.length;
let changeDataList = {};
let changeData:any = {totalScore:0, completionProgress:0, currentScore:0};
list.forEach( info => {
let {thirdLevelScore, currentScore, completionProgress, schedule} = info;
changeData.schedule = schedule;
changeData.totalScore += thirdLevelScore;
changeData.completionProgress += completionProgress;
changeData.currentScore += currentScore;
})
let completion = changeData.completionProgress/count;
if (completion == 100) changeData.schedule = "已完成";
changeData.completionProgress = Math.round(completion)+ "%"
changeDataList["key"] = key;
changeDataList["list"] = changeData;
partyQuality.push({dataList:changeDataList, detail});
})
return partyQuality;
}
/**
* 党建先锋
*/
import { OPERATIONALDATATYPE, TABLENAME } from "../config/dbEnum";
import { selectData } from "../middleware/databaseSuccess";
import { extractData } from "../util/piecemeal";
import * as splitResultConfig from "../config/splitResultConfig";
import * as configEnum from "../config/enum";
import * as verificationEnumTools from "../util/verificationEnum";
import moment = require("moment");
/**
* 获取党建先锋列表
* @param bId 弃用支部id,数据表删除该字段
* @param honorName
* @returns
*/
export async function partyVanguardList(bId:number, honorName:string) {
let param = {
isUse: 1,
};
if(honorName) param["honorName"] = {"%like%":honorName};
let clomun = ["pvId", "honorName", "honorType", "grantingRange", "grantingUnit", "grantTime"];
let partyVanguardData = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.党建先锋表, param, clomun);
let partyVanguardList = [];
partyVanguardData.forEach( async info => {
let changeData:any = extractData(splitResultConfig.partyVanguardConfig, info);
changeData.honorType = verificationEnumTools.changeEnumValue(configEnum.HONORTYPE, info.honorType);
changeData.grantingRange = verificationEnumTools.changeEnumValue(configEnum.GRANTINGRANGE, info.grantingRange);
changeData.grantTime = moment(info.grantTime).format("YYYY-MM-DD");
partyVanguardList.push(changeData);
});
return partyVanguardList;
}
/**
* 获取党建先锋荣誉详情
* @param pvId
* @returns
*/
export async function partyVanguardDetsils(pvId:number) {
let param = {pvId};
let clomun = ["honorName", "honorType", "grantingRange", "grantingUnit", "grantTime"];
let partyVanguardData = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.党建先锋表, param, clomun);
partyVanguardData.honorType = verificationEnumTools.changeEnumValue(configEnum.HONORTYPE, partyVanguardData.honorType);
partyVanguardData.grantingRange = verificationEnumTools.changeEnumValue(configEnum.GRANTINGRANGE, partyVanguardData.grantingRange);
partyVanguardData.grantTime = moment(partyVanguardData.grantTime).format("YYYY-MM-DD");
return partyVanguardData;
}
/**
* 党员入口登录
*/
import { ERRORENUM } from '../config/errorEnum';
import { BizError } from '../util/bizError';
import * as sysTools from "../tools/system";
import { operationalData, selectData } from '../middleware/databaseSuccess';
import { OPERATIONALDATATYPE, TABLENAME } from '../config/dbEnum';
const moment = require("moment");
export async function login(loginId:string, pwd:string) {
let clomun = ["pmId", "loginId", "pwd", "token", "bId"];
let loginInfo:any = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.党员基础信息表, {loginId}, clomun);
if (!loginInfo) throw new BizError(ERRORENUM.账号不存在, `${loginId}账号非党员账号`);
if (loginInfo.pwd != pwd) throw new BizError(ERRORENUM.密码错误);
const Token = sysTools.getToken(loginId);
let updateLogin = {
token: Token,
tokenMs: moment(new Date()).format("YYYY-MM-DD HH:mm:ss")
}
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.党员基础信息表, updateLogin, {loginId});
return {
userid: loginInfo.pmId,
token: Token,
bId: loginInfo.bId,
};
}
/**
* 修改密码
* 未使用
* @param uscc 信用代码
* @param pwd 原密码 md5之后的
* @param newPwd 新密码 未md5
* @param confirmPwd 确认新密码 未md5
* @returns {isSuccess:true}
*/
export async function changePassword(loginId:string, pwd:string, newPwd:string, confirmPwd:string ) {
if (newPwd != confirmPwd) throw new BizError(ERRORENUM.密码不一致);
if (newPwd.search(/^[A-Za-z0-9]{6,18}$/) < 0) throw new BizError(ERRORENUM.密码只能由618位字符和数字组成);
let partyMemberInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.党员基础信息表, {loginId}, ["pmId", "loginId", "pwd"]);
if (!partyMemberInfo) throw new BizError(ERRORENUM.未找到数据);
/**由于pwd是md5之后的 所以这里md5一次即可 */
let checkPwd = sysTools.getPwdMd5(partyMemberInfo.loginId, pwd);
if (partyMemberInfo.pwd != checkPwd) throw new BizError(ERRORENUM.密码错误);
/**考虑到如果前端把新密码也md5 就不可以验证是不是符合规则 所以前端传的是明文
* 我们初始化密码的时候 有两次加密 第一次是密码md5 然后再和loginId 进行md5
* 于是这里也要如此操作
*/
partyMemberInfo.pwd = sysTools.getPwdMd5(loginId, sysTools.md5PwdStr(newPwd));
await partyMemberInfo.save();
return {isSuccess:true};
}
/**
* 党员基础信息
*/
/**党内职务icon */
export enum PARTYPOSITIONSICON {
党员 = 1,
入党积极分子,
预备党员,
党总支书记 = 4,
党总支副书记,
党总支宣传委员,
党总支统战委员,
党总支纪检委员,
支部书记 = 100,
支部副书记,
纪检委员,
统战委员,
组织委员,
宣传委员,
}
/**
* 组织生活活动类型
*/
export enum TYPE {
全部活动 = 1,
正在进行,
即将开展,
已经开展,
}
/**
* 名册录入类型
*/
export enum ENTRYTYPE {
正式党员录入 = 1,
入党积极分子录入,
入党申请录入
}
/**
* 党内职务 partyPositions
*/
export enum PARTYPOSITIONS {
支部书记 = 100,
支部副书记,
纪检委员,
统战委员,
组织委员,
宣传委员,
}
\ No newline at end of file
/**
* 请求数据中心类型
*/
export enum OPERATIONALDATATYPE {
增加 = '/yfs/dataserver/mysql/table/add',
修改 = '/yfs/dataserver/mysql/table/update',
删除 = '/yfs/dataserver/mysql/table/delete',
查询单个 = '/yfs/dataserver/mysql/table/find/one',
查询多个 = '/yfs/dataserver/mysql/table/find/many',
分页查询 = '/yfs/dataserver/mysql/table/find/manytopage',
查询数据量 = '/yfs/dataserver/mysql/table/find/count',
多表联查 = '/yfs/dataserver/mysql/table/find/aggragate',
多表分页 = '/yfs/dataserver/mysql/table/find/aggragatetopage',
多表查询单个 = '/yfs/dataserver/mysql/table/find/aggragateone'
}
export enum TABLENAME {
支部表='branch',
后台用户表='adminUser',
党员基础信息表='partyMember',
行政职务表='administrativePosition',
党内职务表='partyPositions',
所属科室表='department',
支部制度表='branchSystem',
组织生活表='organizationalLife',
专题活动表='thematicActivities',
党建动态表='partyBuildingDynamic',
党费管理表='partyExpenses',
党建先锋表='partyVanguard',
党员学习表='memberLearning',
学习进度表='rateLearning',
课程类型='courseType',
学习强国='learningPower',
党建质量三级指标='thirdLevel',
}
\ No newline at end of file
/**
* 校验表单参数配置
* 使用场景: 验证客户端请求参数
* 限制: 1.使用端不同不能共用一份配置
* 2.需要搭配 util/verificationParam -> eccFormParam() 方法使用
* 说明: notMustHave = true 时说明该字段是非必填的;不配该字段说明是必填的
*/
/**
* 使用端: 小程序端_党员入口
* 场景: 创建组织生活活动表单
* 备注: 1.0
*/
export const CreateActivityConfig = {
partyActivityType:{type:"Number", notMustHave:true},//党建活动类型
activityStartTime:{type:"Number", notMustHave:true},//活动开始时间
activityEndTime:{type:"Number", notMustHave:true},//活动结束时间
activityAdd:{type:"String", notMustHave:true},//活动地点
activityHost:{type:"[String]", notMustHave:true},//活动主持人
activityNoteTaker:{type:"[String]", notMustHave:true},//活动记录人
leavePartyMember:{type:"[String]", notMustHave:true},//请假党员
participatingPartyMember:{type:"[String]", notMustHave:true},//参与党员
participationRecord:{type:"String", notMustHave:true},//活动记录
branchName:{type:"[Number]", notMustHave:true}, //支部名称
};
/**
* 文件------------------------
*/
/**上传文件类型 */
export enum FILETYPE {
word = 1,
pdf,
图片,
视频,
多类型,
其他
}
/**
* 党员基础信息表---------------------------
*/
/**名册录入类型 */
export enum ENTRYTYPE {
正式党员 = 1,
入党积极分子,
预备党员
}
/**性别 */
export enum SEX {
= 1,
}
/**文化程度 */
export enum DEGREE {
初中 = 1,
高中,
大专,
本科,
硕士,
博士
}
/**所属支部 */
export enum BRANCHNAME {
牙防所第一支部 = 1,
牙防所第二支部,
牙防所第三支部,
牙防所第四支部
}
/**行政职务 */
export enum ADMINISTRATIVEPOSITION {
职员 = 1,
办公室主任,
办公室副主任,
财务科副科长,
副所长,
口腔种植科主任,
副主任护师,
副主任医师,
工会主席,
口腔技术室主任 = 10,
护理部主任,
护师,
护士,
技师,
技士,
康健分所主任,
口腔颌面外科副主任,
口腔修复科副主任,
口腔正畸科主任,
口腔综合科副主任 = 20,
人事科科长,
项目管理工程师,
牙体牙髓科副主任,
牙周科主任,
医师,
医务科副科长,
预防口腔,
儿童口腔科主任,
执行所长,
主管护师 = 30,
主管技师,
主治医师,
}
/**党内职务 */
export enum PARTYPOSITIONS {
党总支书记 = 4,
党总支副书记,
党总支宣传委员,
党总支统战委员,
党总支纪检委员,
支部书记 = 100,
支部副书记,
纪检委员,
统战委员,
组织委员,
宣传委员,
}
/**所属科室 */
export enum DEDPARTMENT {
办公室 = 1,
财务科,
放射科,
工会,
技术室,
颌面外科,
护理,
护理部,
检验科,
康健分所,
科教科,
口腔颌面外科,
口腔科,
口腔修复科,
口腔正畸科,
口腔综合科,
人事科,
特需,
信息科,
修复科,
牙体牙髓科,
牙周科,
药房,
医务科,
预防科,
预防口腔,
儿童口腔科,
院部,
种植科,
正畸科,
综合科,
}
/**党员状态 */
export enum PARTYSTATE {
在党 = 1,
退党
}
/**
* 组织生活---------------------------
*/
/**主题类型 */
export enum THEMETYPE {
理论学习 = 1,
实践学习
}
/**
* 党费管理---------------------------
*/
/**缴纳状态 */
export enum PAYTYPE {
已缴纳 = 1,
未缴纳
}
/**
* 党建先锋---------------------------
*/
/**一级指标 */
export enum PRIMARYINDICATORS {
班子队伍健全 = 1,
教育管理党员规范,
党员先锋模范作用有力,
党风廉政行风建设有效,
医院文化建设到位,
特色亮点显著,
}
/**二级指标 */
export enum SECONDARYINDICATORS {
突出政治功能_dou确保政治站位 = 11,
组织架构完备_dou配强工作力量 = 12,
支部制度完善 = 13,
_zyh三会一课_yyh_dun主题党日活动规范落实 = 21,
党员发展_dun党籍管理_dun党费收缴_dun使用_dun管理规范 = 22,
教育培训及时到位 = 23,
日常亮身份_dun树形象 = 31,
各类先进评选 = 32,
参与行业党建_dun区域化党建 = 33,
履行党风廉政建设主体责任和监督责任 = 41,
医德医风和行风建设 = 42,
医院文化建设 = 51,
精神文明建设_dun统战和群团工作 = 52,
培育选树先进典型_dou打造医疗服务品牌 = 53,
常态化了解困难诉求_dou健全职工意见诉求机制 = 54,
开展党建课题研究_dou刊登发表党建论文 = 61,
社会影响大_dun特别典型 = 62,
积极开展党支部品牌创建 = 63,
}
/**荣誉类型 */
export enum HONORTYPE {
区级 = 1,
市级,
院级,
国家级,
}
/**授予范围 */
export enum GRANTINGRANGE {
个人 = 1,
团体,
单位,
}
/**
* 党员学习---------------------------
*/
/**课程类型 */
export enum COURSETYPE {
学习二十大 = 1,
党课,
四个意识,
四个自信,
}
export enum PBTYPE {
党建资讯 = 1,
党建动态,
}
export enum UPTYPE {
支部制度 = 1,
组织生活 = 2,
专题活动 = 3,
党建动态 = 4,
党员学习 = 5,
学习强国 = 6
}
export enum ERRORENUM {
身份验证失败 = 1,
非法登录,
身份验证过期,
参数错误,
地址数据不完整,
请完善信息,
该方法仅可进行数据操作,
数据操作失败,
数据查询失败,
数据联合查询失败,
该方法仅可进行查询操作,
该方法仅可进行联合查询操作,
分页请设置当前页数,
密码错误,
用户不存在,
该用户不是管理员,
目标用户不是正式党员,
管理员不可被删除,
权限不足,
目标数据不存在,
账号不存在,
密码不一致,
密码只能由618位字符和数字组成,
未找到数据,
库中不存在对应数据,
表单校验失败,
暂无对应数据,
该进度不是文字学习
}
export enum ERRORCODEENUM {
身份验证失败 = 401,
非法登录 = 402,
身份验证过期 = 403,
}
let bizErrorMsgMap = {};
for (let key in ERRORENUM) {
bizErrorMsgMap[ERRORENUM[key]] = key;
}
export function getBizMsg(param) {
return bizErrorMsgMap[param];
}
\ No newline at end of file
/**
* 拆分返回结果配置
* 使用场景:逻辑层中需要返回数据给客户端的地方
* 限制:使用端不同不能共用一份配置
*/
/**
* 使用端: 小程序_党员入口
* 场景: 首页党建资讯列表
*/
export const partyInformationConfig = {
taId:{key:"taId"},
theme:{key:"资讯标题"},
branchName:{key:"支部名称"},
dataMonth:{key:"资讯时间"},
pbType:{key:"资讯类型"},
};
/**
* 使用端: 小程序_党员入口
* 场景: 首页党建资讯列表
*/
export const buildingDynamiconfig = {
pbId:{key:"taId"},
theme:{key:"资讯标题"},
branchName:{key:"支部名称"},
dataMonth:{key:"资讯时间"},
pbType:{key:"资讯类型"},
};
/**
* 使用端: 小程序_党员入口
* 场景: 党员名称
* 备注: 党建名册的党员名册
*/
export const partyMemberConfig = {
pmId:{key:"pmId"},
name:{key:"姓名"},
etId:{key:"名册录入类型"},
partyPositionsName:{key:"党内职务"},
partyStanding:{key: "党龄"},
departmentName:{key:"所属科室"},
color:{key:"颜色"},
}
/**
* 使用端: 小程序_党员入口
* 场景: 党员详情
*/
export const partyMemberDetailsConfig = {
etId:{key:"名册录入类型"},
name:{key:"姓名"},
partyPositionsName:{key:"党内职务"},
partyStanding:{key: "党龄"},
departmentName:{key:"所属科室"},
study:{key:"学习情况"},
sex:{key:"性别"},
birthDate:{key:"出生年月", changeDate:true},
phone:{key:"手机号码"},
levelOfEducation:{key:"文化程度"},
partyJoiningTime:{key:"入党时间", changeDate:true},
administrativePositionName:{key:"行政职务"},
partyState:{key:"党员状态"},
color:{key:"颜色"},
}
/**
* 使用端: 小程序_党员入口
* 场景: 入党积极分子详情
*/
export const activistDetailsConfig = {
etId:{key:"名册录入类型"},
name:{key:"姓名"},
partyPositionsName:{key:"党内职务"},
departmentName:{key:"所属科室"},
study:{key:"学习情况"},
sex:{key:"性别"},
birthDate:{key:"出生年月", changeDate:true},
phone:{key:"手机号码"},
levelOfEducation:{key:"文化程度"},
askForTime:{key:"申请入党时间", changeDate:true},
listedAsActivistsTime:{key:"列为积极分子", changeDate:true},
liaison:{key:"联系人"},
administrativePositionName:{key:"行政职务"},
color:{key:"颜色"},
}
/**
* 使用端: 小程序_党员入口
* 场景: 预备党员详情
*/
export const prepareDetailsConfig = {
etId:{key:"名册录入类型"},
name:{key:"姓名"},
partyPositionsName:{key:"党内职务"},
departmentName:{key:"所属科室"},
study:{key:"学习情况"},
sex:{key:"性别"},
birthDate:{key:"出生年月", changeDate:true},
phone:{key:"手机号码"},
levelOfEducation:{key:"文化程度"},
branchName:{key:"所属支部"},
askForTime:{key:"申请入党时间", changeDate:true},
talkTime:{key:"谈话时间", changeDate:true},
administrativePositionName:{key:"行政职务"},
color:{key:"颜色"},
}
/**
* 使用端: 小程序_党员入口
* 场景: 党费管理
*/
export const partyExpensesConfig = {
pmId:{key:"pmId"},
payType:{key:"缴纳状态"},
payTime:{key:"缴费时间", changeDate:true},
name:{key:"姓名"},
partyPositionsName:{key:"党内职务"},
departmentName:{key:"所属科室"},
partyJoiningTime:{key:"入党时间", changeDate:true},
}
/**
* 使用端: 小程序_党员入口
* 场景: 党费管理
*/
export const expensesMenberConfig = {
name:{key:"姓名"},
partyPositionsName:{key:"党内职务"},
departmentName:{key:"所属科室"},
partyJoiningTime:{key:"入党时间", changeDate:true},
}
/**
* 使用端: 小程序_党员入口
* 场景: 党建先锋
*/
export const partyVanguardConfig = {
pvId:{key:"pvId"},
honorName:{key:"荣誉名称"},
honorType:{key:"荣誉类型"},
grantingRange:{key:"授予范围"},
grantingUnit:{key:"授予单位"},
grantTime:{key:"授予时间", changeDate:true}
}
/**
* 使用端: 小程序_党员入口
* 场景: 组织生活
*/
export const organlzationalLifeConfig = {
oId:{key:"oId"},
theme:{key:"活动标题"},
themeType:{key:"活动类型"},
dataMonth:{key:"活动月份", changeDate:true }
}
/**
* 使用端: 小程序_党员入口
* 场景: 党建资讯
*/
export const thematicActivitiesConfig = {
taId:{key:"pbId"},
theme:{key:"活动名称"},
dataMonth:{key:"数据月份", changeDate:true},
pbType:{key:"资讯类型"},
}
/**
* 使用端: 小程序_党员入口
* 场景: 党建动态
*/
export const partyBuildingDynamicConfig = {
pbId:{key:"pbId"},
theme:{key:"活动名称"},
dataMonth:{key:"数据月份", changeDate:true},
pbType:{key:"资讯类型"},
}
/**
* 使用端: 小程序_党员入口
* 场景: 本月积分排名
*/
export const learningPowerConfig = {
pmId:{key:"党员id"},
name:{key:"党员名称"},
bId:{key:"支部名称"},
dayIntegral:{key:"积分"},
dataTime:{key:"数据时间"}
}
/**
* 系统配置类
*
*/
export class ServerConfig {
/**系统配置 */
port:number;
dbPath:string;
dbSign:string;
imgUrl:string;
fileIP:string;
}
\ No newline at end of file
const path = require('path');
import * as fs from "fs";
import { BizError } from "../util/bizError";