Commit 943b86e1 by lixinming

init

parents
.idea
/out
/node_modules
/test
/public
/logs
/video
*.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.npm.taobao.org/@alicloud/dybaseapi/download/@alicloud/dybaseapi-1.0.0.tgz",
"integrity": "sha1-VS7dCZD5Db1p1AI3zf7/w2bQofU=",
"requires": {
"@alicloud/pop-core": "^1.3.3"
}
},
"@alicloud/dysmsapi-2017-05-25": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/@alicloud/dysmsapi-2017-05-25/download/@alicloud/dysmsapi-2017-05-25-1.0.1.tgz",
"integrity": "sha1-qKtpTb4QXrnWfL0eNzV/ag+Eh9U=",
"requires": {
"@alicloud/pop-core": "^1.5.1"
}
},
"@alicloud/mns": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/@alicloud/mns/download/@alicloud/mns-1.0.0.tgz",
"integrity": "sha1-AzqBmJmNXtk9onw72f8LnusJDpY=",
"requires": {
"debug": "^2.6.3",
"httpx": "^2.1.1",
"kitx": "^1.2.0",
"xml2js": "^0.4.17"
}
},
"@alicloud/pop-core": {
"version": "1.7.10",
"resolved": "https://registry.npm.taobao.org/@alicloud/pop-core/download/@alicloud/pop-core-1.7.10.tgz?cache=0&sync_timestamp=1603357203292&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40alicloud%2Fpop-core%2Fdownload%2F%40alicloud%2Fpop-core-1.7.10.tgz",
"integrity": "sha1-0OIhA227DM3kU90Jsc+r2DQbemk=",
"requires": {
"debug": "^3.1.0",
"httpx": "^2.1.2",
"json-bigint": "^1.0.0",
"kitx": "^1.2.1",
"xml2js": "^0.4.17"
},
"dependencies": {
"debug": {
"version": "3.2.7",
"resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
"integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz",
"integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI="
}
}
},
"@alicloud/sms-sdk": {
"version": "1.1.6",
"resolved": "https://registry.npm.taobao.org/@alicloud/sms-sdk/download/@alicloud/sms-sdk-1.1.6.tgz",
"integrity": "sha1-dwHq4eCDLINo1nebQtWDaPlEy/A=",
"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.13.10",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
"integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
"requires": {
"regenerator-runtime": "^0.13.4"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.13.7",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
"integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
}
}
},
"@types/bson": {
"version": "4.0.3",
"resolved": "https://registry.npm.taobao.org/@types/bson/download/@types/bson-4.0.3.tgz?cache=0&sync_timestamp=1613378303280&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbson%2Fdownload%2F%40types%2Fbson-4.0.3.tgz",
"integrity": "sha1-MIidL/3mJiq744ZZNkxjFFSZn78=",
"requires": {
"@types/node": "*"
}
},
"@types/debug": {
"version": "4.1.12",
"resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz",
"integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
"requires": {
"@types/ms": "*"
}
},
"@types/mongodb": {
"version": "3.6.10",
"resolved": "https://registry.npm.taobao.org/@types/mongodb/download/@types/mongodb-3.6.10.tgz?cache=0&sync_timestamp=1615809585833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fmongodb%2Fdownload%2F%40types%2Fmongodb-3.6.10.tgz",
"integrity": "sha1-gMzqq+7J9GDltGhE6Tjo66dPkmY=",
"requires": {
"@types/bson": "*",
"@types/node": "*"
}
},
"@types/ms": {
"version": "0.7.34",
"resolved": "https://registry.npmmirror.com/@types/ms/-/ms-0.7.34.tgz",
"integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
},
"@types/node": {
"version": "10.17.55",
"resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-10.17.55.tgz?cache=0&sync_timestamp=1615834822695&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.55.tgz",
"integrity": "sha1-oUfygu3sZ5uJTUaU7bWr61lf7L0="
},
"@types/validator": {
"version": "13.11.8",
"resolved": "https://registry.npmmirror.com/@types/validator/-/validator-13.11.8.tgz",
"integrity": "sha512-c/hzNDBh7eRF+KbCf+OoZxKbnkpaK/cKp9iLQWqB7muXtM+MtL9SUUH8vCFcLn6dH1Qm05jiexK0ofWY7TfOhQ=="
},
"accepts": {
"version": "1.3.7",
"resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
"integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
}
},
"adler-32": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz",
"integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
"requires": {
"exit-on-epipe": "~1.0.1",
"printj": "~1.1.0"
}
},
"agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/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.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
"integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
"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"
}
},
"archiver": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz",
"integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==",
"requires": {
"archiver-utils": "^2.1.0",
"async": "^3.2.0",
"buffer-crc32": "^0.2.1",
"readable-stream": "^3.6.0",
"readdir-glob": "^1.0.0",
"tar-stream": "^2.1.4",
"zip-stream": "^4.0.4"
},
"dependencies": {
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"archiver-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
"integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
"requires": {
"glob": "^7.1.4",
"graceful-fs": "^4.2.0",
"lazystream": "^1.0.0",
"lodash.defaults": "^4.2.0",
"lodash.difference": "^4.5.0",
"lodash.flatten": "^4.4.0",
"lodash.isplainobject": "^4.0.6",
"lodash.union": "^4.6.0",
"normalize-path": "^3.0.0",
"readable-stream": "^2.0.0"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
"integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
"requires": {
"safer-buffer": "~2.1.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"async": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
},
"async-limiter": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz",
"integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.11.0",
"resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101311814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz",
"integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk="
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
}
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"requires": {
"tweetnacl": "^0.14.3"
}
},
"bignumber.js": {
"version": "9.0.1",
"resolved": "https://registry.npm.taobao.org/bignumber.js/download/bignumber.js-9.0.1.tgz",
"integrity": "sha1-jXuhJMiCv9jkMmDGdHVRjQaJ5OU="
},
"bl": {
"version": "2.2.1",
"resolved": "https://registry.npm.taobao.org/bl/download/bl-2.2.1.tgz?cache=0&sync_timestamp=1612867177492&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbl%2Fdownload%2Fbl-2.2.1.tgz",
"integrity": "sha1-jBGntzBlXF1WiYzchxIk9A/ZAdU=",
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
}
},
"bluebird": {
"version": "3.5.1",
"resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz",
"integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk="
},
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "~1.6.17"
},
"dependencies": {
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
}
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"bson": {
"version": "1.1.6",
"resolved": "https://registry.npm.taobao.org/bson/download/bson-1.1.6.tgz",
"integrity": "sha1-+4Gb6aYM1nfghTruTKcSp4XWYYo="
},
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz",
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/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.npm.taobao.org/caseless/download/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"cfb": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz",
"integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==",
"requires": {
"adler-32": "~1.2.0",
"crc-32": "~1.2.0",
"printj": "~1.1.2"
}
},
"charenc": {
"version": "0.0.2",
"resolved": "https://registry.npm.taobao.org/charenc/download/charenc-0.0.2.tgz",
"integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
},
"codepage": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz",
"integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=",
"requires": {
"commander": "~2.14.1",
"exit-on-epipe": "~1.0.1"
},
"dependencies": {
"commander": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
"integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
}
}
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
"integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"commander": {
"version": "2.17.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
},
"compress-commons": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz",
"integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==",
"requires": {
"buffer-crc32": "^0.2.13",
"crc32-stream": "^4.0.2",
"normalize-path": "^3.0.0",
"readable-stream": "^3.6.0"
},
"dependencies": {
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
"integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
"requires": {
"mime-db": ">= 1.43.0 < 2"
}
},
"compression": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/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"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"requires": {
"safe-buffer": "5.1.2"
}
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"core-js": {
"version": "2.6.12",
"resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.12.tgz?cache=0&sync_timestamp=1614537347747&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.12.tgz",
"integrity": "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw="
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"crc-32": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
"integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
"requires": {
"exit-on-epipe": "~1.0.1",
"printj": "~1.1.0"
}
},
"crc32-stream": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz",
"integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==",
"requires": {
"crc-32": "^1.2.0",
"readable-stream": "^3.4.0"
},
"dependencies": {
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"crypt": {
"version": "0.0.2",
"resolved": "https://registry.npm.taobao.org/crypt/download/crypt-0.0.2.tgz",
"integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073333186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"date-format": {
"version": "4.0.13",
"resolved": "http://localhost:4873/date-format/-/date-format-4.0.13.tgz",
"integrity": "sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ=="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"requires": {
"ms": "2.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"denque": {
"version": "1.5.0",
"resolved": "https://registry.npm.taobao.org/denque/download/denque-1.5.0.tgz?cache=0&sync_timestamp=1609779969821&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdenque%2Fdownload%2Fdenque-1.5.0.tgz",
"integrity": "sha1-dz3gaG/y2Owv+SkUMWpHtzscc94="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"dottie": {
"version": "2.0.6",
"resolved": "https://registry.npmmirror.com/dottie/-/dottie-2.0.6.tgz",
"integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA=="
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"requires": {
"once": "^1.4.0"
}
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"exit-on-epipe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
"integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
},
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"requires": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
"body-parser": "1.19.0",
"content-disposition": "0.5.3",
"content-type": "~1.0.4",
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~1.1.2",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "~1.1.2",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.5",
"qs": "6.7.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.1.2",
"send": "0.17.1",
"serve-static": "1.14.1",
"setprototypeof": "1.1.1",
"statuses": "~1.5.0",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
"dependencies": {
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
}
}
},
"express-async-handler": {
"version": "1.1.4",
"resolved": "https://registry.npm.taobao.org/express-async-handler/download/express-async-handler-1.1.4.tgz",
"integrity": "sha1-IlqEkI32OzWunflLbw8a8GEmZCY="
},
"express-history-api-fallback": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/express-history-api-fallback/-/express-history-api-fallback-2.2.1.tgz",
"integrity": "sha1-OirSf3vryQ/FM9EQ18bYMJe80Fc="
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz",
"integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
"integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU="
},
"fast-image-size": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/fast-image-size/-/fast-image-size-0.1.3.tgz",
"integrity": "sha512-aYg0XgNJT1F3z90HP04JedMhyBPkpQTM1va/JnjQsVqemBvsO7sRYMLAgp0A0opVFTyyoTbesV8HLYBJegRkKg=="
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM="
},
"fflate": {
"version": "0.3.11",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz",
"integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A=="
},
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
}
},
"flatted": {
"version": "3.2.6",
"resolved": "http://localhost:4873/flatted/-/flatted-3.2.6.tgz",
"integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ=="
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz",
"integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"formidable": {
"version": "1.2.2",
"resolved": "https://registry.npm.taobao.org/formidable/download/formidable-1.2.2.tgz",
"integrity": "sha1-v2muopcpgmdfAIZTQrmCmG9rjdk="
},
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
"frac": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"fs-extra": {
"version": "8.1.0",
"resolved": "http://localhost:4873/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"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"generate-function": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/generate-function/-/generate-function-2.3.1.tgz",
"integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
"requires": {
"is-property": "^1.0.2"
}
},
"get-intrinsic": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
"integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
}
},
"get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"graceful-fs": {
"version": "4.2.10",
"resolved": "http://localhost:4873/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz",
"integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=",
"requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.1",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.0"
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1600868613104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/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.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"httpx": {
"version": "2.2.7",
"resolved": "https://registry.npm.taobao.org/httpx/download/httpx-2.2.7.tgz",
"integrity": "sha1-HjQZgUbjLKMwWmbBEglVnhy+ugk=",
"requires": {
"@types/node": "^14",
"debug": "^4.1.1"
},
"dependencies": {
"@types/node": {
"version": "14.14.35",
"resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.14.35.tgz?cache=0&sync_timestamp=1615834822695&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.14.35.tgz",
"integrity": "sha1-QslTpOKxirkx9yR35wEhcvT/oxM="
},
"debug": {
"version": "4.3.1",
"resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
"integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
"integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
}
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
},
"inflection": {
"version": "1.13.4",
"resolved": "https://registry.npmmirror.com/inflection/-/inflection-1.13.4.tgz",
"integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw=="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/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.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604429388528&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
"integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
},
"is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
},
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"json-bigint": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/json-bigint/download/json-bigint-1.0.0.tgz",
"integrity": "sha1-rlR4I6wMrYOYZn+M2e9HMPWwH/E=",
"requires": {
"bignumber.js": "^9.0.0"
}
},
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1609553708276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1608000211395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
"integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsonfile": {
"version": "4.0.0",
"resolved": "http://localhost:4873/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": {
"graceful-fs": "^4.1.6"
}
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"jszip": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"requires": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"setimmediate": "^1.0.5"
}
},
"kareem": {
"version": "2.3.2",
"resolved": "https://registry.npm.taobao.org/kareem/download/kareem-2.3.2.tgz",
"integrity": "sha1-eMRQiJSYW404oNwV4ajhEHjyypM="
},
"kitx": {
"version": "1.3.0",
"resolved": "https://registry.npm.taobao.org/kitx/download/kitx-1.3.0.tgz",
"integrity": "sha1-qz7nxZjSsdYp/VVWj4aMREDCAOo="
},
"lazystream": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
"integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
"requires": {
"readable-stream": "^2.0.5"
}
},
"lie": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"requires": {
"immediate": "~3.0.5"
}
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lodash.defaults": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
"integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
},
"lodash.difference": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
"integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA=="
},
"lodash.flatten": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
"integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="
},
"lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
},
"lodash.union": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
"integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw=="
},
"log4js": {
"version": "6.6.1",
"resolved": "http://localhost:4873/log4js/-/log4js-6.6.1.tgz",
"integrity": "sha512-J8VYFH2UQq/xucdNu71io4Fo+purYYudyErgBbswWKO0MC6QVOERRomt5su/z6d3RJSmLyTGmXl3Q/XjKCf+/A==",
"requires": {
"date-format": "^4.0.13",
"debug": "^4.3.4",
"flatted": "^3.2.6",
"rfdc": "^1.3.0",
"streamroller": "^3.1.2"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "http://localhost:4873/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "http://localhost:4873/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"long": {
"version": "5.2.3",
"resolved": "https://registry.npmmirror.com/long/-/long-5.2.3.tgz",
"integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
},
"lru-cache": {
"version": "4.1.5",
"resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz",
"integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
"md5": {
"version": "2.3.0",
"resolved": "https://registry.npm.taobao.org/md5/download/md5-2.3.0.tgz?cache=0&sync_timestamp=1596362680344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmd5%2Fdownload%2Fmd5-2.3.0.tgz",
"integrity": "sha1-w9qaaq46MLRreww0m4exENw72k8=",
"requires": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npm.taobao.org/memory-pager/download/memory-pager-1.5.0.tgz",
"integrity": "sha1-2HUWVdItOEaCdByXLyw9bfo+ZrU=",
"optional": true
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.46.0",
"resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.46.0.tgz?cache=0&sync_timestamp=1613194744108&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.46.0.tgz",
"integrity": "sha1-Ymd0in95lZTePLyM3pHe80lmHO4="
},
"mime-types": {
"version": "2.1.29",
"resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.29.tgz?cache=0&sync_timestamp=1613608491741&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.29.tgz",
"integrity": "sha1-HUq3faZLkfX3JInfKSNlY3VLsbI=",
"requires": {
"mime-db": "1.46.0"
}
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz?cache=0&sync_timestamp=1601983320283&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.29.1.tgz",
"integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M="
},
"moment-timezone": {
"version": "0.5.44",
"resolved": "https://registry.npmmirror.com/moment-timezone/-/moment-timezone-0.5.44.tgz",
"integrity": "sha512-nv3YpzI/8lkQn0U6RkLd+f0W/zy/JnoR5/EyPz/dNkPTBjA2jNLCVxaiQ8QpeLymhSZvX0wCL5s27NQWdOPwAw==",
"requires": {
"moment": "^2.29.4"
},
"dependencies": {
"moment": {
"version": "2.30.1",
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
}
}
},
"mongodb": {
"version": "3.6.5",
"resolved": "https://registry.npm.taobao.org/mongodb/download/mongodb-3.6.5.tgz",
"integrity": "sha1-wn14b9TTyD3BkwJINwfRKp0q7l8=",
"requires": {
"bl": "^2.2.1",
"bson": "^1.1.4",
"denque": "^1.4.1",
"require_optional": "^1.0.1",
"safe-buffer": "^5.1.2",
"saslprep": "^1.0.0"
}
},
"mongoose": {
"version": "5.12.1",
"resolved": "https://registry.npm.taobao.org/mongoose/download/mongoose-5.12.1.tgz?cache=0&sync_timestamp=1616103030377&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmongoose%2Fdownload%2Fmongoose-5.12.1.tgz",
"integrity": "sha1-mqzorHg7I5kGJTOWqY8qVsCWS4s=",
"requires": {
"@types/mongodb": "^3.5.27",
"bson": "^1.1.4",
"kareem": "2.3.2",
"mongodb": "3.6.5",
"mongoose-legacy-pluralize": "1.0.2",
"mpath": "0.8.3",
"mquery": "3.2.4",
"ms": "2.1.2",
"regexp-clone": "1.0.0",
"safe-buffer": "5.2.1",
"sift": "7.0.1",
"sliced": "1.0.1"
},
"dependencies": {
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
"integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
"integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY="
}
}
},
"mongoose-legacy-pluralize": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/mongoose-legacy-pluralize/download/mongoose-legacy-pluralize-1.0.2.tgz",
"integrity": "sha1-O6n5H6UHtRhtOZ+0CFS/8Y+1Y+Q="
},
"mpath": {
"version": "0.8.3",
"resolved": "https://registry.npm.taobao.org/mpath/download/mpath-0.8.3.tgz",
"integrity": "sha1-gorA0Yf39CZ0g510khlwl5q73Y8="
},
"mquery": {
"version": "3.2.4",
"resolved": "https://registry.npm.taobao.org/mquery/download/mquery-3.2.4.tgz?cache=0&sync_timestamp=1613149714087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmquery%2Fdownload%2Fmquery-3.2.4.tgz",
"integrity": "sha1-nFwuKF6mxvIGc/NSiXPJnuGqoaA=",
"requires": {
"bluebird": "3.5.1",
"debug": "3.1.0",
"regexp-clone": "^1.0.0",
"safe-buffer": "5.1.2",
"sliced": "1.0.1"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz",
"integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
"requires": {
"ms": "2.0.0"
}
}
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"mysql": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
"integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
"requires": {
"bignumber.js": "9.0.0",
"readable-stream": "2.3.7",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
},
"dependencies": {
"bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
"integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
}
}
},
"mysql2": {
"version": "3.7.0",
"resolved": "https://registry.npmmirror.com/mysql2/-/mysql2-3.7.0.tgz",
"integrity": "sha512-c45jA3Jc1X8yJKzrWu1GpplBKGwv/wIV6ITZTlCSY7npF2YfJR+6nMP5e+NTQhUeJPSyOQAbGDCGEHbAl8HN9w==",
"requires": {
"denque": "^2.1.0",
"generate-function": "^2.3.1",
"iconv-lite": "^0.6.3",
"long": "^5.2.1",
"lru-cache": "^8.0.0",
"named-placeholders": "^1.1.3",
"seq-queue": "^0.0.5",
"sqlstring": "^2.3.2"
},
"dependencies": {
"denque": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/denque/-/denque-2.1.0.tgz",
"integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="
},
"iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
}
},
"lru-cache": {
"version": "8.0.5",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-8.0.5.tgz",
"integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA=="
},
"sqlstring": {
"version": "2.3.3",
"resolved": "https://registry.npmmirror.com/sqlstring/-/sqlstring-2.3.3.tgz",
"integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="
}
}
},
"named-placeholders": {
"version": "1.1.3",
"resolved": "https://registry.npmmirror.com/named-placeholders/-/named-placeholders-1.1.3.tgz",
"integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
"requires": {
"lru-cache": "^7.14.1"
},
"dependencies": {
"lru-cache": {
"version": "7.18.3",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.18.3.tgz",
"integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="
}
}
},
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
"integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
},
"node-fetch": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
"integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
"node-xlsx": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.16.1.tgz",
"integrity": "sha512-mwEZKItGXKO+jp5Pz9+wDCXxqhJITGd6m81A8WmalBpGAzREiR5cIJ0xrSF0BxzU6Mh2mC0fA2X0/3GqNU6dIw==",
"requires": {
"@babel/runtime": "^7.12.5",
"buffer-from": "^1.1.1",
"xlsx": "^0.16.9"
}
},
"nodemailer": {
"version": "6.5.0",
"resolved": "https://registry.npm.taobao.org/nodemailer/download/nodemailer-6.5.0.tgz?cache=0&sync_timestamp=1614329161993&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnodemailer%2Fdownload%2Fnodemailer-6.5.0.tgz",
"integrity": "sha1-0Swo2NSHeJGOJfGZnZeRAjGxddk="
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz",
"integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU="
},
"object-inspect": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
},
"officegen": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/officegen/-/officegen-0.6.5.tgz",
"integrity": "sha512-CpSqy7UiGeu1OvMGbj2nXIVRsi5Tcnr09Ce4RDxkZMU5pgDRV8ipROAe8iuhNZaLFPBM/dxdcR4Ty/BglhfrDA==",
"requires": {
"archiver": "~5.2.0",
"async": "^3.2.0",
"fast-image-size": "^0.1.3",
"jszip": "^3.6.0",
"lodash": "^4.17.21",
"readable-stream": "~3.6.0",
"setimmediate": "~1.0.5",
"xmlbuilder": "^15.1.1"
},
"dependencies": {
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"xmlbuilder": {
"version": "15.1.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
"integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="
}
}
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"requires": {
"ee-first": "1.1.1"
}
},
"on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"requires": {
"wrappy": "1"
}
},
"opentype.js": {
"version": "0.7.3",
"resolved": "https://registry.npm.taobao.org/opentype.js/download/opentype.js-0.7.3.tgz",
"integrity": "sha1-QPuM4Yv9YOdESO/f5EKDQJg5eqs=",
"requires": {
"tiny-inflate": "^1.0.2"
}
},
"pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"pg-connection-string": {
"version": "2.6.2",
"resolved": "https://registry.npmmirror.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz",
"integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA=="
},
"printj": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
"integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
"integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I="
},
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/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.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
},
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz",
"integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ="
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
"integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
},
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"dependencies": {
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
}
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz",
"integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"readdir-glob": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
"integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
"requires": {
"minimatch": "^5.1.0"
},
"dependencies": {
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"requires": {
"balanced-match": "^1.0.0"
}
},
"minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"requires": {
"brace-expansion": "^2.0.1"
}
}
}
},
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz",
"integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
},
"regexp-clone": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/regexp-clone/download/regexp-clone-1.0.0.tgz",
"integrity": "sha1-Ii25Z2IydwViYLmSYmNUoEzpv2M="
},
"request": {
"version": "2.88.2",
"resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz",
"integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=",
"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.npmjs.org/qs/-/qs-6.5.3.tgz",
"integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
}
}
},
"require_optional": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/require_optional/download/require_optional-1.0.1.tgz",
"integrity": "sha1-TPNaQkf2TKPfjC7yCMxJSxyo/C4=",
"requires": {
"resolve-from": "^2.0.0",
"semver": "^5.1.0"
}
},
"resolve-from": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-2.0.0.tgz",
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
},
"retry-as-promised": {
"version": "7.0.4",
"resolved": "https://registry.npmmirror.com/retry-as-promised/-/retry-as-promised-7.0.4.tgz",
"integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA=="
},
"rfdc": {
"version": "1.3.0",
"resolved": "http://localhost:4873/rfdc/-/rfdc-1.3.0.tgz",
"integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
"integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
},
"saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npm.taobao.org/saslprep/download/saslprep-1.0.3.tgz",
"integrity": "sha1-TAL5RrVs9UKX40e6EJPnrKxM8iY=",
"optional": true,
"requires": {
"sparse-bitfield": "^3.0.3"
}
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
"integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
"destroy": "~1.0.4",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "~1.7.2",
"mime": "1.6.0",
"ms": "2.1.1",
"on-finished": "~2.3.0",
"range-parser": "~1.2.1",
"statuses": "~1.5.0"
},
"dependencies": {
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
}
}
},
"seq-queue": {
"version": "0.0.5",
"resolved": "https://registry.npmmirror.com/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
},
"sequelize": {
"version": "6.35.2",
"resolved": "https://registry.npmmirror.com/sequelize/-/sequelize-6.35.2.tgz",
"integrity": "sha512-EdzLaw2kK4/aOnWQ7ed/qh3B6/g+1DvmeXr66RwbcqSm/+QRS9X0LDI5INBibsy4eNJHWIRPo3+QK0zL+IPBHg==",
"requires": {
"@types/debug": "^4.1.8",
"@types/validator": "^13.7.17",
"debug": "^4.3.4",
"dottie": "^2.0.6",
"inflection": "^1.13.4",
"lodash": "^4.17.21",
"moment": "^2.29.4",
"moment-timezone": "^0.5.43",
"pg-connection-string": "^2.6.1",
"retry-as-promised": "^7.0.4",
"semver": "^7.5.4",
"sequelize-pool": "^7.1.0",
"toposort-class": "^1.0.1",
"uuid": "^8.3.2",
"validator": "^13.9.0",
"wkx": "^0.5.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"
}
},
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"requires": {
"yallist": "^4.0.0"
}
},
"moment": {
"version": "2.30.1",
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"semver": {
"version": "7.5.4",
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"requires": {
"lru-cache": "^6.0.0"
}
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
"sequelize-pool": {
"version": "7.1.0",
"resolved": "https://registry.npmmirror.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz",
"integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg=="
},
"serve-static": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.17.1"
}
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
},
"setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/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"
}
},
"sift": {
"version": "7.0.1",
"resolved": "https://registry.npm.taobao.org/sift/download/sift-7.0.1.tgz",
"integrity": "sha1-R9YsULFZ0xbxNy+LU/nBDNIaSwg="
},
"sliced": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz",
"integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
},
"sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npm.taobao.org/sparse-bitfield/download/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
"requires": {
"memory-pager": "^1.0.2"
}
},
"sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
},
"ssf": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
"requires": {
"frac": "~1.1.2"
}
},
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz",
"integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=",
"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": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"streamroller": {
"version": "3.1.2",
"resolved": "http://localhost:4873/streamroller/-/streamroller-3.1.2.tgz",
"integrity": "sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==",
"requires": {
"date-format": "^4.0.13",
"debug": "^4.3.4",
"fs-extra": "^8.1.0"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "http://localhost:4873/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "http://localhost:4873/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
"integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"svg-captcha": {
"version": "1.4.0",
"resolved": "https://registry.npm.taobao.org/svg-captcha/download/svg-captcha-1.4.0.tgz",
"integrity": "sha1-MurTxkY5NsIYuzvJ7QT+pO7/5JI=",
"requires": {
"opentype.js": "^0.7.3"
}
},
"tar-stream": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
"requires": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
},
"dependencies": {
"bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"requires": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
},
"dependencies": {
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
}
}
},
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"tencentcloud-sdk-nodejs": {
"version": "4.0.562",
"resolved": "https://registry.npmjs.org/tencentcloud-sdk-nodejs/-/tencentcloud-sdk-nodejs-4.0.562.tgz",
"integrity": "sha512-v519qlSr39bWeQiulCYZx6Doz3rs2R5gyKenj3LEDdo/SIlfZHdPEOEwqxcc5Fu9WSL4BRX74H2w8o/BN+1xyg==",
"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.npmjs.org/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.npm.taobao.org/tiny-inflate/download/tiny-inflate-1.0.3.tgz",
"integrity": "sha1-EicVSUkToYBRZqr3yTRnkz7qJsQ="
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"toposort-class": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/toposort-class/-/toposort-class-1.0.1.tgz",
"integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg=="
},
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz",
"integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=",
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
}
},
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
},
"tslib": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/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": "http://localhost:4873/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237586670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz",
"integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
"requires": {
"punycode": "^2.1.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1607460052228&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
"integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4="
},
"validator": {
"version": "13.11.0",
"resolved": "https://registry.npmmirror.com/validator/-/validator-13.11.0.tgz",
"integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"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.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"wkx": {
"version": "0.5.0",
"resolved": "https://registry.npmmirror.com/wkx/-/wkx-0.5.0.tgz",
"integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==",
"requires": {
"@types/node": "*"
}
},
"wmf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
},
"word": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"ws": {
"version": "5.2.2",
"resolved": "https://registry.npm.taobao.org/ws/download/ws-5.2.2.tgz?cache=0&sync_timestamp=1615063662500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-5.2.2.tgz",
"integrity": "sha1-3/7xSGa46NyRM1glFNG++vlumA8=",
"requires": {
"async-limiter": "~1.0.0"
}
},
"xlsx": {
"version": "0.16.9",
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.16.9.tgz",
"integrity": "sha512-gxi1I3EasYvgCX1vN9pGyq920Ron4NO8PNfhuoA3Hpq6Y8f0ECXiy4OLrK4QZBnj1jx3QD+8Fq5YZ/3mPZ5iXw==",
"requires": {
"adler-32": "~1.2.0",
"cfb": "^1.1.4",
"codepage": "~1.14.0",
"commander": "~2.17.1",
"crc-32": "~1.2.0",
"exit-on-epipe": "~1.0.1",
"fflate": "^0.3.8",
"ssf": "~0.11.2",
"wmf": "~1.0.1",
"word": "~0.3.0"
}
},
"xml2js": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/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.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
},
"zip-stream": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz",
"integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==",
"requires": {
"archiver-utils": "^3.0.4",
"compress-commons": "^4.1.2",
"readable-stream": "^3.6.0"
},
"dependencies": {
"archiver-utils": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz",
"integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==",
"requires": {
"glob": "^7.2.3",
"graceful-fs": "^4.2.0",
"lazystream": "^1.0.0",
"lodash.defaults": "^4.2.0",
"lodash.difference": "^4.5.0",
"lodash.flatten": "^4.4.0",
"lodash.isplainobject": "^4.0.6",
"lodash.union": "^4.6.0",
"normalize-path": "^3.0.0",
"readable-stream": "^3.6.0"
}
},
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
}
}
}
{
"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",
"mongoose": "^5.4.0",
"mysql": "^2.18.1",
"mysql2": "^3.7.0",
"node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1",
"officegen": "^0.6.5",
"qs": "^6.11.0",
"request": "^2.88.0",
"sequelize": "^6.35.2",
"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>40011</port>
<!-- 默认null mysql填入mysql mongodb填入mongo 都有填all 如果没有数据库填null -->
<specifyDB>all</specifyDB>
<mongodb>
<path>127.0.0.1</path>
<port>27017</port>
<w>1</w>
<!-- <dataBase>baseDB</dataBase> -->
<dataBase>xuehui</dataBase>
<wtimeoutMS>30000</wtimeoutMS>
</mongodb>
<mysqldb>
<!-- 本地mysql配置 -->
<mysqlHost>192.168.0.105</mysqlHost>
<mysqlPort>3306</mysqlPort>
<mysqlUser>root</mysqlUser>
<mysqlPwd>123456</mysqlPwd>
<dataBase>xuehui</dataBase>
</mysqldb>
</config>
/**
* 会员逻辑
*/
/**
* 单位会员列表
* @param param0
*/
export async function unitMemberList({unitName, joinTime}) {
}
export async function memberList({}) {
}
/**
* 用户逻辑
*/
import { DOCUMENTTYPE, MEMBERTYPE, NATION, PROFCATEGORY, SEX, UNITINFOTYPE } from "../../config/enum";
import { ERRORCODEENUM, ERRORENUM } from "../../config/errorEnum";
import { addOneData } from "../../data/add";
import { TABLEENUM } from "../../data/models/model";
import { findOnce } from "../../data/select";
import { updateOneData } from "../../data/update";
import { generateToken, generateUserId, successResult } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { eccEnumValue } from "../../util/verificationEnum";
/**
* 注册个人会员
* @param param0
*/
export async function signInOfEntity({form}) {
/**校验枚举 */
const EccFuncName = '注册个人会员';
eccEnumValue(EccFuncName, '性别', SEX, form.sex);
eccEnumValue(EccFuncName, '证件类型', DOCUMENTTYPE, form.documentType);
eccEnumValue(EccFuncName, '民族', NATION, form.nation);
eccEnumValue(EccFuncName, '专业类别', PROFCATEGORY, form.profCategory);
let oldData = await findOnce(TABLEENUM.用户表, {"$or":[{loginId:form.loginId}, {phone:form.phone}, {mail:form.mail}] });
if (oldData && oldData.userId) {
if (oldData.loginId == form.loginId) throw new BizError(ERRORENUM.用户名重复, form.loginId );
if (oldData.phone == form.phone) throw new BizError(ERRORENUM.联系人手机号重复, form.phone );
if (oldData.mail == form.mail) throw new BizError(ERRORENUM.邮箱重复, form.loginId );
}
/**校验密码 */
if (form.pwd.search(/^[A-Za-z0-9]{6,18}$/) < 0) throw new BizError(ERRORENUM.密码只能由618位字符和数字组成);
if (form.pwd != form.confirmation) throw new BizError(ERRORENUM.两次密码不一致);
delete form.confirmation;
form.userId = generateUserId();
form.memberType = MEMBERTYPE.个人会员;
form.isAdmin = 0;
await addOneData(TABLEENUM.用户表, form);
return successResult();
}
/**
* 单位会员
* @param param0
*/
export async function singInOfUnit({form}) {
/**校验枚举 */
const EccFuncName = '注册单位会员';
eccEnumValue(EccFuncName, '单位信息类型', UNITINFOTYPE, form.unitInfoType);
let oldData = await findOnce(TABLEENUM.用户表, {"$or":[{loginId:form.loginId}, {phone:form.phone}, {mail:form.mail}] });
if (oldData && oldData.userId) {
if (oldData.loginId == form.loginId) throw new BizError(ERRORENUM.用户名重复, form.loginId );
if (oldData.phone == form.phone) throw new BizError(ERRORENUM.联系人手机号重复, form.phone );
if (oldData.mail == form.mail) throw new BizError(ERRORENUM.邮箱重复, form.loginId );
}
/**校验密码 */
if (form.pwd.search(/^[A-Za-z0-9]{6,18}$/) < 0) throw new BizError(ERRORENUM.密码只能由618位字符和数字组成);
if (form.pwd != form.confirmation) throw new BizError(ERRORENUM.两次密码不一致);
delete form.confirmation;
form.userId = generateUserId();
form.memberType = MEMBERTYPE.单位会员;
form.isAdmin = 0;
await addOneData(TABLEENUM.用户表, form);
return successResult();
}
/**
* 登陆
* @param param0
* @returns
*/
export async function login({loginId, pwd }) {
let userInfo = await findOnce(TABLEENUM.用户表, {loginId});
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.账号或密码错误);
if (userInfo.pwd != pwd ) throw new BizError(ERRORENUM.账号或密码错误);
let token = generateToken(userInfo.userId);
await updateOneData(TABLEENUM.用户表, {userId:userInfo.userId}, {token, tokenMs:new Date().valueOf()});
return {
userInfo:{
isAdmin:userInfo.isAdmin == 1,
name:userInfo.name,
userId:userInfo.userId,
token:token
}
}
}
/**
* 退出登陆
* @param userId
* @returns
*/
export async function logout({userId}) {
let token = generateToken(userId);
await updateOneData(TABLEENUM.用户表, {userId:userId}, {token});
return successResult();
}
/**
* 官网
*/
import moment = require("moment");
import { ARTICLEPOSITION, BANNERPOSITION, CODPARTICIPANT, DONGTAIZIXUNSUBTYPE, IMGEDITFUNENUM, PARTYBUILDSUBTYPEENUM, PARTYBUILDTYPEENUM, STATE, TONGZHIGONGGAO } from "../config/enum";
import { TABLEENUM } from "../data/models/model";
import { find, findCount, findOnce, findToPage } from "../data/select";
import { extractData } from "../util/piecemeal";
import { changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { BizError } from "../util/bizError";
export async function banner() {
let result = {
bannerList:[],//banner
};
/**banner */
let localBanners = [BANNERPOSITION.首页_hghbanner01, BANNERPOSITION.首页_hghbanner02, BANNERPOSITION.首页_hghbanner03];
let bannerData = await find(TABLEENUM.banner管理, {location:{"$in":localBanners}, display:STATE.} );
bannerData.forEach(info => {
let {imgUrl, title, desc, articleUrl} = info;
result.bannerList.push({imgUrl, title, desc, articleUrl});
});
return result;
}
/**
* 首页除了banner
* @returns
*/
export async function homePage() {
let result = {
zhuanTi:[],//专题系列
xueHuiDongTai:[],//学会动态
huoDongTongZhi:[],//活动通知
reDianShiPin:[]//热点视频
};
/**专题系列 */
let zhuanTiData = await find(TABLEENUM.专题系列, {});
zhuanTiData.sort((a, b) => {return a.rank - b.rank});
zhuanTiData.forEach(info => {
let {rank, title, articleUrl, imgUrl} = info;
result.zhuanTi.push({rank, title, articleUrl, imgUrl});
});
/**学会动态 每个动态资讯取最新的可见的两个*/
let wenZhangTypeList = [ARTICLEPOSITION.动态资讯_hgh学会动态, ARTICLEPOSITION.动态资讯_hgh政策动向, ARTICLEPOSITION.动态资讯_hgh行业风采];
let dongTaiZiXunData = await find(TABLEENUM.文章管理, {articleType:{"$or":wenZhangTypeList }, display:STATE.});
dongTaiZiXunData.sort((a, b) => {return a.articleTime - b.articleTime});
let dongTaiZiXunDistinctMap = {};
dongTaiZiXunData.forEach(info => {
let { articleType, id, title, imgUrl, articleTime, desc } = info;
if (!dongTaiZiXunDistinctMap[articleType]) dongTaiZiXunDistinctMap[articleType] = [];
if (dongTaiZiXunDistinctMap[articleType].length < 2) {
dongTaiZiXunDistinctMap[articleType].push({
id, title, imgUrl, articleTime, desc
});
}
});
for (let key in dongTaiZiXunDistinctMap) {
result.xueHuiDongTai = result.xueHuiDongTai.concat(dongTaiZiXunDistinctMap[key]);
}
/**活动通知 */
let huoDongTongZhiData = await find(TABLEENUM.活动通知, { push:STATE. } );//todo 二期优化点 在获取数据时取最新6条
huoDongTongZhiData.sort((a, b) => {return a.st - b.st});
huoDongTongZhiData.forEach(info => {
let {id, name, st} = info;
result.huoDongTongZhi.push({
id, name, time:moment(st).format("YYYY-MM-DD")
});
});
/**热点视频*/
let reDianShiPinData = await find(TABLEENUM.视频管理, { display:STATE. } );
reDianShiPinData.sort((a, b) => {return a.videoTime - b.videoTime});
for (let i= 0; i < reDianShiPinData.length; i++) {
let {title, desc, videoUrl} = reDianShiPinData[i];
result.reDianShiPin.push({title, desc, videoUrl:videoUrl[0]});
if (i >= 4) break;
}
return result;
}
/**
* 学会概况
* @returns
*/
export async function xueHuiGaiKuang() {
let result = {
xueHuiGaiKuang:{},//学会概况
xueHuiLingDao:[],//学会领导
zuZhiJiaGou:[],//组织架构
xueHuiGuiZhang:[],//学会规章
};
/**学会概况 */
let xueHuiGaiKuangData = await findOnce(TABLEENUM.学会概括, {} );
result.xueHuiGaiKuang = extractData(xueHuiGaiKuangData, ["title", "desc", "imgList"]);
/**学会领导 */
let xueHuiLingDaoData = await findOnce(TABLEENUM.学会领导, {} );
xueHuiLingDaoData.sort((a, b) => {return a.rank - b.rank});
xueHuiLingDaoData.forEach(info => {
result.xueHuiLingDao.push(extractData(info, ["name", "position", "imgUrl", "miniImgUrl", "desc"]));
});
/**组织架构 */
let zuZhiJiaGouData = await findOnce(TABLEENUM.学会架构, {display:1} );
zuZhiJiaGouData.forEach(info => {
result.xueHuiLingDao.push(extractData(info, ["departmentName", "desc"]));
});
/**学会规章 */
let xueHuiGuiZhangData = await findOnce(TABLEENUM.文章管理, {articleType:{"$in":[ARTICLEPOSITION.学会概况_hgh学会规章]}, display:STATE.} );
for (let i = 0; i < xueHuiGuiZhangData.length; i++) {
let {id, title, imgUrl, articleTime} = xueHuiGuiZhangData[i];
let articleDate = moment(articleTime)
result.xueHuiGuiZhang.push({
id, title, imgUrl, yearAndMonth:articleDate.format("YYYY-MM"), day:articleDate.format("DD")
});
}
return result;
}
/**
* 学会概况详细信息
* @returns
*/
export async function xueHuiGaiKuangXiangQing() {
let xueHuiGaiKuangData = await findOnce(TABLEENUM.学会概括, {} );
let dataInfo = extractData(xueHuiGaiKuangData, ["title", "desc", "imgList"]);
return {dataInfo};
}
/**
* 规章列表分页
* @param param0
* @returns
*/
export async function guiZhangLieBiaoFenYe({pageNumber}) {
let findParam = {articleType:{"$in":[ARTICLEPOSITION.学会概况_hgh学会规章]}, display:STATE.};
let wenZhangGuanLi = await findToPage(TABLEENUM.文章管理, findParam, [], pageNumber);
let dataCount = await findCount(TABLEENUM.文章管理, findParam);
let dataList = [];
wenZhangGuanLi.forEach(info => {
let itemData:any = extractData(info, ["id", "articleTime", "title", "desc"]);
itemData.articleTime = moment(itemData.articleTime).format("YYYY-MM-DD");
dataList.push(itemData);
});
return { dataList, dataCount };
}
/**
* 学会规则详情
* @param param0
* @returns
*/
export async function guiZhangZhiDuXiangQing({id}) {
let dataBaseInfo = await findOnce(TABLEENUM.文章管理, {id, display:STATE.});
if (!dataBaseInfo || !dataBaseInfo.id) {
throw new BizError();
}
let dataInfo:any = extractData(dataBaseInfo, [ "articleTime", "title", "desc"]);
dataInfo.articleTime = moment(dataInfo.articleTime).format("YYYY-MM-DD");
dataInfo.source = "中国艺术职业教育学会";
return {dataInfo};
}
/**
* 动态资讯
* @param param0
* @returns
*/
export async function dongTaiZiXun({type, pageNumber}) {
eccEnumValue("官网", "行业动态类型", type, DONGTAIZIXUNSUBTYPE);
let findParam = {articleType:{"$in":[type]}, display:STATE.};
let dataBaseList = await findToPage(TABLEENUM.文章管理, findParam, [], pageNumber);
let dataCount = await findCount(TABLEENUM.文章管理, findParam);
let dataList = [];
dataBaseList.forEach(info => {
let { id, title, desc, imgUrl, articleTime } = info;
dataList.push({
id, title, desc, imgUrl, articleTime:moment(articleTime).format("YYYY-MM-DD")
});
});
return {dataList, dataCount};
}
/**
* 文章详情
* @param param0
* @returns
*/
export async function wenZhangXiangQing({id}) {
let dataBaseInfo = await findOnce(TABLEENUM.文章管理, {id, display:STATE.});
let dataInfo:any = extractData(dataBaseInfo, [ "articleTime", "imgUrl", "title", "desc"]);
dataInfo.articleTime = moment(dataInfo.articleTime).format("YYYY-MM-DD");
dataInfo.source = "中国艺术职业教育学会";
return {dataInfo};
}
/**
* 品牌项目banner
* @returns
*/
export async function pinPaiXiangMuBanner() {
let result = {
bannerList:[],//banner
};
/**banner */
let localBanners = [BANNERPOSITION.品牌项目_hghbanner01, BANNERPOSITION.品牌项目_hghbanner02, BANNERPOSITION.品牌项目_hghbanner03];
let bannerData = await find(TABLEENUM.banner管理, {location:{"$in":localBanners}, display:STATE.} );
bannerData.forEach(info => {
let {imgUrl, title, desc, articleUrl} = info;
result.bannerList.push({imgUrl, title, desc, articleUrl});
});
return result;
}
/**
* 品牌项目信息
* @returns
*/
export async function pinPaiXiangMu() {
let result = {
xiangCunZhenXing:[],//乡村振兴
fangHuaBei:[],//芳华杯
xueShuYanJiu:[],//学术研究
xueShuYanJiuImgList:[]//学术研究图片
};
/**乡村振兴 */
let locationParam = [ARTICLEPOSITION.品牌项目_hgh乡村振兴];
let xiangCunZhenXingData = await find(TABLEENUM.文章管理, {location:{"$in":locationParam}, display:STATE.} );
xiangCunZhenXingData.forEach(info => {
let {id, title, imgUrl, articleTime, desc} = info;
result.xiangCunZhenXing.push({
id, title, imgUrl, articleTime:moment(articleTime).format("YYYY-MM-DD"), desc
});
});
/**芳华杯 */
locationParam = [ARTICLEPOSITION.品牌项目_hgh芳华杯];
let fangHuaBeiData = await find(TABLEENUM.文章管理, {location:{"$in":locationParam}, display:STATE.} );
fangHuaBeiData.forEach(info => {
let {id, title, imgUrl, articleTime, desc} = info;
result.xiangCunZhenXing.push({
id, title, imgUrl, articleTime:moment(articleTime).format("YYYY-MM-DD"), desc
});
});
/**学术研究 */
locationParam = [ARTICLEPOSITION.品牌项目_hgh学术研究];
let xueShuYanJiuData = await find(TABLEENUM.文章管理, {location:{"$in":locationParam}, display:STATE.} );
xueShuYanJiuData.forEach(info => {
let {id, title, imgUrl, articleTime, desc} = info;
result.xiangCunZhenXing.push({
id, title, imgUrl, articleTime:moment(articleTime).format("YYYY-MM-DD"), desc
});
});
/**学术研究图片 */
let xueShuYanJiuImgData = await find(TABLEENUM.图片编辑, {type:IMGEDITFUNENUM.学术研究});
xueShuYanJiuImgData.forEach((info) => {
let {index, imgUrl} = info;
result.xueShuYanJiuImgList.push({index, imgUrl});
});
result.xueShuYanJiuImgList.sort((a, b) => {return a.index - b.index});
return result;
}
/**
* 学术研究列表
* @param param0
* @returns
*/
export async function xueshuyanjiu({pageNumber}) {
let findParam = {articleType:{"$in":[ARTICLEPOSITION.品牌项目_hgh学术研究]}, display:STATE.};
let dataBaseList = await findToPage(TABLEENUM.文章管理, findParam, [], pageNumber);
let dataCount = await findCount(TABLEENUM.文章管理, findParam);
let dataList = [];
dataBaseList.forEach(info => {
let { id, title, desc, imgUrl, articleTime } = info;
dataList.push({
id, title, desc, imgUrl, articleTime:moment(articleTime).format("YYYY-MM-DD")
});
});
return {dataList, dataCount};
}
/**
* 乡村振兴列表
* @param param0
* @returns
*/
export async function xiangCunZhenXing({pageNumber}) {
let findParam = {articleType:{"$in":[ARTICLEPOSITION.品牌项目_hgh乡村振兴]}, display:STATE.};
let dataBaseList = await findToPage(TABLEENUM.文章管理, findParam, [], pageNumber);
let dataCount = await findCount(TABLEENUM.文章管理, findParam);
let dataList = [];
dataBaseList.forEach(info => {
let { id, title, desc, imgUrl, articleTime } = info;
dataList.push({
id, title, desc, imgUrl, articleTime:moment(articleTime).format("YYYY-MM-DD")
});
});
return {dataList, dataCount};
}
/**
* 党建工作主题教育
* @returns
*/
export async function zhuTiJiaoYu() {
let dataInfo = {};
/**主题教育 */
let dbList = await find(TABLEENUM.党建, {type:PARTYBUILDTYPEENUM.主题教育});
for (let i = 0; i < dbList.length; i++) {
let info = dbList[i];
let itemId = info.id;
dataInfo[info.name] = [];
let findParam = {articleType:{"$in":[itemId]}, display:STATE.};
let dataBaseList = await find(TABLEENUM.文章管理, findParam, ["title", "desc", "articleTime", "imgUrl"]);
dataBaseList.forEach(item => {
let {title, desc, articleTime, imgUrl} = item;
dataInfo[info.name].push({title, desc, articleTime, imgUrl});
});
}
return {dataInfo};
}
/**
* 学习园地
* @param param0
* @returns
*/
export async function xueXiYuanDi({type}) {
let reuslt = {
wenZiZiLiao:[],//文字资料
shiPinZiLiao:[]//视频资料
};
let wzDBList = await find(TABLEENUM.文字资料, {type});
wzDBList.forEach(info => {
let addInfo:any = extractData(info, ["title", "rank", "imgUrl", "articleUrl", "updateTime"]);
addInfo.updateTime = moment(addInfo.updateTime).format("YYYY-MM-DD");
reuslt.wenZiZiLiao.push(addInfo);
});
let spDBList = await find(TABLEENUM.视频管理, {videoType:type, display:STATE.});
spDBList.forEach(info => {
let addInfo:any = extractData(info, ["title", "videoUrl", "videoTime"]);
addInfo.videoTime = moment(addInfo.videoTime).format("YYYY-MM-DD");
reuslt.shiPinZiLiao.push(addInfo);
});
return reuslt;
}
/**
* 党建资源列表
* @param param0
* @returns
*/
export async function dangJianZiYuan({first, secondary, three, pageNumber}) {
let dataList = [];
if (first == PARTYBUILDTYPEENUM.主题教育) {
let findParam = {articleType:{"$in":[secondary]}, display:STATE.};
let dataBaseList = await findToPage(TABLEENUM.文章管理, findParam, ["title", "desc", "articleTime", "imgUrl"], pageNumber);
dataBaseList.forEach(item => {
let {title, desc, articleTime, imgUrl} = item;
dataList.push({title, desc, articleTime, imgUrl});
});
} else {//学习园地
if (secondary == PARTYBUILDSUBTYPEENUM.文字资料) {
let wzDBList = await findToPage(TABLEENUM.文字资料, {type:three}, ["title", "rank", "imgUrl", "articleUrl", "updateTime"], pageNumber);
wzDBList.forEach(info => {
let addInfo:any = extractData(info, ["title", "rank", "imgUrl", "articleUrl", "updateTime"]);
addInfo.updateTime = moment(addInfo.updateTime).format("YYYY-MM-DD");
dataList.push(addInfo);
});
} else {
let spDBList = await findToPage(TABLEENUM.视频管理, {videoType:three, display:STATE.}, ["title", "videoUrl", "videoTime"], pageNumber);
spDBList.forEach(info => {
let addInfo:any = extractData(info, ["title", "videoUrl", "videoTime"]);
addInfo.videoTime = moment(addInfo.videoTime).format("YYYY-MM-DD");
dataList.push(addInfo);
});
}
}
return {dataList};
}
/**
* 通知公告
* @param param0
* @returns
*/
export async function tongZhiGongGao({type, pageNumber}) {
eccEnumValue("通知公告", "类型", TONGZHIGONGGAO, type);
let tableName;
switch (type) {
case TONGZHIGONGGAO.会议通知: tableName = TABLEENUM.会议通知; break;
case TONGZHIGONGGAO.活动通知: tableName = TABLEENUM.活动通知; break;
case TONGZHIGONGGAO.项目公告: tableName = TABLEENUM.项目公告; break;
}
let dbList = await findToPage(tableName, {push:STATE.}, ["name", "st", "addrest", "members"], pageNumber);
let dataList = [];
dbList.forEach(info => {
let item:any = extractData(info, ["name", "addrest", ]);
item.time = moment(info.st).format("YYYY-MM-DD");
item.members = changeEnumValue(CODPARTICIPANT, info.members);
dataList.push(item);
});
return {dataList};
}
\ No newline at end of file
/**
* 文字资料
*/
import { ARTICLEPOSITION } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { addManyData } from "../../../data/add";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
import { changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
/**
* 列表
* @param param0
* @returns
*/
export async function list({userId, type}) {
let dbList = await find(TABLEENUM.文字资料, {type});
let dataList = [];
if ( !dbList || !dbList.length) {
let addList = [];
for (let i = 1; i <= 8; i++) {
let id = generateSystemId(TABLEENUM.文字资料, userId);
addList.push({id, rank:i, title:'', articleUrl:'', type, imgUrl:"", position:0, articleTitle:'', updateTime:0});
dataList.push({id, rank:i, title:'', articleUrl:'', type, imgUrl:"", position:0, articleTitle:'', updateTime:0});
}
await addManyData(TABLEENUM.文字资料, addList);
}
dataList.sort((a:any, b:any) => {return a.rank - b.rank });
dbList.forEach(info => {
let item:any = extractData(info, ["id", "title", "rank", "position", "articleTitle" ]);
if (!item.position) item.position = "未选择";
else changeEnumValue(ARTICLEPOSITION, item.position);
dataList.push(item);
});
return {dataList};
}
/**
* 预览
*/
export async function preview({userId, type}) {
let dbList = await find(TABLEENUM.文字资料, {type});
let dataList = [];
if (!dbList || !dbList.length) {
let addList = [];
for (let i = 1; i <= 8; i++) {
let id = generateSystemId(TABLEENUM.文字资料, userId);
addList.push({id, rank:i, title:'', articleUrl:'', type, imgUrl:"", position:0, articleTitle:'', updateTime:0});
dataList.push({id, rank:i, title:'', articleUrl:'', type, imgUrl:"", position:0, articleTitle:'', updateTime:0});
}
await addManyData(TABLEENUM.文字资料, addList);
}
dataList.sort((a:any, b:any) => {return a.rank - b.rank });
dbList.forEach(info => {
let item = extractData(info, ["id", "title", "rank", "imgUrl", "updateTime"]);
dataList.push(item);
});
return {dataList};
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update({userId, id, title, imgUrl, position, articleTitle, articleUrl, updateTime}) {
eccEnumValue('修改文字资料', '位置', ARTICLEPOSITION, position );
let oldInfo = await findOnce(TABLEENUM.文字资料, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.文字资料, {id}, {title, imgUrl, position, articleTitle, articleUrl, updateTime});
return successResult();
}
export async function del({userId, id}) {
let dataInfo = await findOnce(TABLEENUM.文字资料, {id});
if (!dataInfo || !dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.文字资料, {id}, {title:'', imgUrl:'', position:0, articleTitle:'', articleUrl:'', updateTime:0});
return successResult();
}
/**
* 回显
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM.文字资料, {id});
if (!oldInfo || !oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let dataInfo = extractData(oldInfo, ["id", "title", "imgUrl", "position", "articleTitle", "articleUrl", "updateTime"]);
return { dataInfo };
}
\ No newline at end of file
/**
* 学习园地
*
*
*/
import { PARTYBUILDSUBTYPEENUM, PARTYBUILDTYPEENUM, STATE } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { addManyData } from "../../../data/add";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
export async function list() {
let dbList = await find(TABLEENUM.党建, {type:PARTYBUILDTYPEENUM.学习园地});
if (!dbList || !dbList.length) {
let dbList = [
{id:1100, type:PARTYBUILDTYPEENUM.学习园地, subType:PARTYBUILDSUBTYPEENUM.视频资料, display:true, name:"类型1"},
{id:1101, type:PARTYBUILDTYPEENUM.学习园地, subType:PARTYBUILDSUBTYPEENUM.视频资料, display:true, name:"类型2"},
{id:1102, type:PARTYBUILDTYPEENUM.学习园地, subType:PARTYBUILDSUBTYPEENUM.视频资料, display:true, name:"类型3"},
{id:1200, type:PARTYBUILDTYPEENUM.学习园地, subType:PARTYBUILDSUBTYPEENUM.文字资料, display:true, name:"类型1"},
{id:1201, type:PARTYBUILDTYPEENUM.学习园地, subType:PARTYBUILDSUBTYPEENUM.文字资料, display:true, name:"类型2"},
{id:1202, type:PARTYBUILDTYPEENUM.学习园地, subType:PARTYBUILDSUBTYPEENUM.文字资料, display:true, name:"类型3"}
];
await addManyData(TABLEENUM.党建, dbList);
}
let videoList = [];
let fileList = [];
dbList.forEach(info => {
let {id, subType, name, display} = info;
if (subType == PARTYBUILDSUBTYPEENUM.文字资料) {
fileList.push({
id,
subType,
name,
display:display == STATE.,
count:11
});
} else {
videoList.push({
id,
subType,
name,
display:display == STATE.,
count:11
});
}
});
return {fileList, videoList};
}
export async function update(secureArgs:any) {
let {userId, id, typeName} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.党建, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.党建, {id}, {name:typeName});
return successResult();
}
export async function changeState({userId, id}) {
let oldInfo = await findOnce(TABLEENUM.党建, {id});
if (!oldInfo || !oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let newPush = oldInfo.display == 1 ? 0 : 1;
await updateOneData(TABLEENUM.党建, {id}, {display:newPush});
return successResult();
}
\ No newline at end of file
/**
* 主题教育
*/
import { PARTYBUILDTYPEENUM, STATE } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { addManyData } from "../../../data/add";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
export async function list() {
let dbList = await find(TABLEENUM.党建, {type:PARTYBUILDTYPEENUM.主题教育});
if (!dbList || !dbList.length) {
let dbList = [
{id:1000, type:PARTYBUILDTYPEENUM.主题教育, display:true, name:"类型1"},
{id:1001, type:PARTYBUILDTYPEENUM.主题教育, display:true, name:"类型2"},
{id:1002, type:PARTYBUILDTYPEENUM.主题教育, display:true, name:"类型3"},
{id:1003, type:PARTYBUILDTYPEENUM.主题教育, display:true, name:"类型4"}
];
await addManyData(TABLEENUM.党建, dbList);
}
let dataList = [];
dbList.forEach(info => {
let {id, name, display} = info;
dataList.push({
id,name,count:88, display:display == STATE.
});
});
return {dataList};
}
export async function update({userId, id, typeName}) {
let oldInfo = await findOnce(TABLEENUM.党建, {id});
if (!oldInfo || !oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.党建, {id}, {name:typeName});
return successResult();
}
export async function changeState({userId, id}) {
let oldInfo = await findOnce(TABLEENUM.党建, {id});
if (!oldInfo || !oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let newPush = oldInfo.display == 1 ? 0 : 1;
await updateOneData(TABLEENUM.党建, {id}, {display:newPush});
return successResult();
}
\ No newline at end of file
/**
* 分支机构-机构管理-内容管理-工作动态
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建工作动态
* @param userId
* @param param
* @returns
*/
export async function create({userId, agencyId, form}) {
form.id = generateSystemId(TABLEENUM.工作动态, userId);
form.agencyId = agencyId;
await addOneData(TABLEENUM.工作动态, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update({userId, id, form}) {
let oldInfo = await findOnce(TABLEENUM.工作动态, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
if (form.agencyId) {
delete form.agencyId;
}
await updateOneData(TABLEENUM.工作动态, {id}, form);
return successResult();
}
export async function del({userId, id}) {
let dataInfo = await findOnce(TABLEENUM.工作动态, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.工作动态, {id});
return successResult();
}
export async function list({userId, agencyId}) {
let jiGouNameMap = await getJiGouMap();
let dbList = await find(TABLEENUM.工作动态, {agencyId});
let dataList = [];
dbList.forEach(info => {
let item:any = extractData(info, ["id", "title", "activityTime", "isUse"]);
item.jiGouName = jiGouNameMap[info.agencyId];
dataList.push(item);
});
return {dataList};
}
async function getJiGouMap() {
let jiGouList = await find(TABLEENUM.机构管理, {});
let map = {};
jiGouList.forEach(info => {
let {id, name} = info;
map[id] = name;
});
return map;
}
/**
* 回显
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM.工作动态, {id});
let dataInfo = extractData(oldInfo, ["id", "title", "activityTime", "imgUrl", "isUse", "desc"]);
return { dataInfo };
}
export async function changeUse({id}) {
let oldInfo = await findOnce(TABLEENUM.工作动态, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let newPush = oldInfo.isUse == 1 ? 0 : 1;
await updateOneData(TABLEENUM.工作动态, {id}, {isUse:newPush});
return successResult();
}
\ No newline at end of file
/**
* 机构管理
* 排序,后一个排序会与修改前的排序互换
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建机构管理
* @param userId
* @param param
* @returns
*/
export async function create({userId, form}) {
let oldRankInfo = await findOnce(TABLEENUM.机构管理, {rank:form.rank});
if(oldRankInfo && oldRankInfo.id) {
/**存在原来的排名,将上一个去掉 */
await deleteOneData(TABLEENUM.机构管理, {id:oldRankInfo.id});
}
form.id = generateSystemId(TABLEENUM.机构管理, userId);
await addOneData(TABLEENUM.机构管理, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update({userId, id, form}) {
let oldInfo = await findOnce(TABLEENUM.机构管理, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
if (oldInfo.rank != form.rank) {
//排名发生变化
let oldRankInfo = await findOnce(TABLEENUM.机构管理, {rank:form.rank});
await updateOneData(TABLEENUM.机构管理, {id:oldRankInfo.id}, {rank:oldInfo.rank});
}
await updateOneData(TABLEENUM.机构管理, {id}, form);
return successResult();
}
export async function del({userId, id}) {
let dataInfo = await findOnce(TABLEENUM.机构管理, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.机构管理, {id});
return successResult();
}
export async function list() {
let dbList = await find(TABLEENUM.机构管理, {});
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, ["id", "rank", "name", "awardsCount", "logoUrl", "desc"]);
dataList.push(item);
});
dataList.sort((a, b) => {return a.rank - b.rank});
return {dataList};
}
/**
* 预览
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM.机构管理, {id});
let dataInfo = extractData(oldInfo, ["id", "rank", "name", "awardsCount", "desc", "logoUrl"]);
/**获取上下3位的排名列表 */
return { dataInfo };
}
/**
* 分支机构-机构管理-内容管理-委员名单
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建委员名单
* @param userId
* @param param
* @returns
*/
export async function create({userId, agencyId, form}) {
form.id = generateSystemId(TABLEENUM.委员名单, userId);
form.agencyId = agencyId;
await addOneData(TABLEENUM.委员名单, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update({userId, id, form}) {
let oldInfo = await findOnce(TABLEENUM.委员名单, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
if (form.agencyId) {
delete form.agencyId;
}
await updateOneData(TABLEENUM.委员名单, {id}, form);
return successResult();
}
export async function del({userId, id}) {
let dataInfo = await findOnce(TABLEENUM.委员名单, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.委员名单, {id});
return successResult();
}
export async function list({userId, agencyId}) {
let jiGouNameMap = await getJiGouMap();
let dbList = await find(TABLEENUM.委员名单, {agencyId});
let dataList = [];
dbList.forEach(info => {
let item:any = extractData(info, ["id", "name", "branchDuties", "unit", "unitDuties"]);
item.jiGouName = jiGouNameMap[info.agencyId];
dataList.push(item);
});
return {dataList};
}
async function getJiGouMap() {
let jiGouList = await find(TABLEENUM.机构管理, {});
let map = {};
jiGouList.forEach(info => {
let {id, name} = info;
map[id] = name;
});
return map;
}
/**
* 回显
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM.委员名单, {id});
let dataInfo = extractData(oldInfo, ["id", "name", "branchDuties", "unit", "unitDuties"]);
return { dataInfo };
}
/**
* 下载专区
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建下载专区
* @param userId
* @param param
* @returns
*/
export async function create({userId, agencyId, form}) {
form.id = generateSystemId(TABLEENUM.下载专区, userId);
form.agencyId = agencyId;
form.ct = new Date().valueOf();
await addOneData(TABLEENUM.下载专区, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update({userId, id, form}) {
let oldInfo = await findOnce(TABLEENUM.下载专区, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
if (form.agencyId) {
delete form.agencyId;
}
await updateOneData(TABLEENUM.下载专区, {id}, form);
return successResult();
}
export async function del({userId, id}) {
let dataInfo = await findOnce(TABLEENUM.下载专区, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.下载专区, {id});
return successResult();
}
export async function list({userId, agencyId}) {
let jiGouNameMap = await getJiGouMap();
let dbList = await find(TABLEENUM.下载专区, {agencyId});
let dataList = [];
dbList.forEach(info => {
let item:any = extractData(info, ["id", "name", "ct"]);
item.jiGouName = jiGouNameMap[info.agencyId];
dataList.push(item);
});
return {dataList};
}
async function getJiGouMap() {
let jiGouList = await find(TABLEENUM.机构管理, {});
let map = {};
jiGouList.forEach(info => {
let {id, name} = info;
map[id] = name;
});
return map;
}
/**
* 回显
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM.下载专区, {id});
let dataInfo = extractData(oldInfo, ["id", "name", "type", "fileUrl"]);
return { dataInfo };
}
/**
* banner管理
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建banner
* @param userId
* @param param
* @returns
*/
export async function create(secureArgs) {
let {userId, form} = secureArgs;
form.ct = new Date().valueOf();
form.id = generateSystemId(TABLEENUM.banner管理, userId);
await addOneData(TABLEENUM.banner管理, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update(secureArgs:any) {
let {userId, id, form} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.banner管理, {id});
if (!oldInfo || !oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.banner管理, {id}, form);
return successResult();
}
export async function del(secureArgs:any) {
let {userId, id} = secureArgs;
let dataInfo = await findOnce(TABLEENUM.banner管理, {id});
if (!dataInfo || !dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.banner管理, {id});
return successResult();
}
export async function list(secureArgs:any) {
let {userId, title} = secureArgs;
let selectParam:any = {};
if (title) selectParam.title = title;
let dbList = await find(TABLEENUM.banner管理, selectParam);
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, [ "id", "location","articleTitle", "position","articleUrl", "display", "desc"]);
dataList.push(item);
});
return {dataList};
}
/**
* 回显
* @param id
*/
export async function info(secureArgs:any) {
let {id} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.banner管理, {id});
let dataInfo = extractData(oldInfo, [ "id", "location", "articleTitle", "position", "imgUrl", "articleUrl", "desc"]);
return { dataInfo };
}
export async function changePush({id}) {
let oldInfo = await findOnce(TABLEENUM.banner管理, {id});
if (!oldInfo || !oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let newPush = oldInfo.display == 1 ? 0 : 1;
await updateOneData(TABLEENUM.banner管理, {id}, {display:newPush});
return successResult();
}
\ No newline at end of file
/**
* 视频管理
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建文章
* @param userId
* @param param
* @returns
*/
export async function create(secureArgs) {
let {userId, form} = secureArgs;
form.ct = new Date().valueOf();
form.id = generateSystemId(TABLEENUM.视频管理, userId);
await addOneData(TABLEENUM.视频管理, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update(secureArgs:any) {
let {userId, id, form} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.视频管理, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.视频管理, {id}, form);
return successResult();
}
export async function del(secureArgs:any) {
let {userId, id} = secureArgs;
let dataInfo = await findOnce(TABLEENUM.视频管理, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.视频管理, {id});
return successResult();
}
export async function list(secureArgs:any) {
let {userId, videoType, title, videoTime} = secureArgs;
let selectParam:any = {};
if (videoType) selectParam.videoType = videoType;
if (title) selectParam.title = title;
if (videoTime) {
selectParam["$and"] = [
{videoTime:{"$gt":videoTime}},
{videoTime:{"$lt":videoTime+(24*3600*1000)}}
];
}
let dbList = await find(TABLEENUM.视频管理, selectParam);
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, ["id", "title", "videoType", "videoTime", "desc", "display"]);
dataList.push(item);
});
return {dataList};
}
/**
* 回显
* @param id
*/
export async function info(secureArgs:any) {
let {id} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.视频管理, {id});
let dataInfo = extractData(oldInfo, ["id", "title", "videoType", "videoUrl", "videoTime", "desc"]);
return { dataInfo };
}
export async function changePush({id}) {
let oldInfo = await findOnce(TABLEENUM.视频管理, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let newPush = oldInfo.display == 1 ? 0 : 1;
await updateOneData(TABLEENUM.视频管理, {id}, {display:newPush});
return successResult();
}
\ No newline at end of file
/**
* 文章管理
*/
import { STATE } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建文章
* @param userId
* @param param
* @returns
*/
export async function create(secureArgs) {
let {userId, form} = secureArgs;
form.ct = new Date().valueOf();
form.id = generateSystemId(TABLEENUM.文章管理, userId);
await addOneData(TABLEENUM.文章管理, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update(secureArgs:any) {
let {userId, id, form} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.文章管理, {id});
if (!oldInfo || !oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.文章管理, {id}, form);
return successResult();
}
export async function del(secureArgs:any) {
let {userId, id} = secureArgs;
let dataInfo = await findOnce(TABLEENUM.文章管理, {id});
if (!dataInfo || !dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.文章管理, {id});
return successResult();
}
export async function list(secureArgs:any) {
let {userId, articleType, title, articleTime} = secureArgs;
let selectParam:any = {};
if (articleType) selectParam.articleType = articleType;
if (title) selectParam.title = title;
if (articleTime) {
selectParam["$and"] = [
{videoTime:{"$gt":articleTime}},
{videoTime:{"$lt":articleTime+(24*3600*1000)}}
];
}
let dbList = await find(TABLEENUM.文章管理, selectParam);
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, [ "id", "title", "articleType", "imgUrl", "articleTime", "desc", "display"]);
dataList.push(item);
});
return {dataList};
}
/**
* 回显
* @param id
*/
export async function info(secureArgs:any) {
let {id} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.文章管理, {id});
let dataInfo = extractData(oldInfo, ["id", "title", "articleType", "imgUrl", "articleTime", "desc"]);
return { dataInfo };
}
export async function changePush({id}) {
let oldInfo = await findOnce(TABLEENUM.文章管理, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let newPush = oldInfo.display == 1 ? 0 : 1;
await updateOneData(TABLEENUM.文章管理, {id}, {display:newPush});
return successResult();
}
export async function getTitleList({type}) {
let selectParam = {articleType:{"$in":[type]}, display:STATE.};
let dbList = await find(TABLEENUM.文章管理, selectParam, ["id", "title"]);
let dataList = [];
dbList.forEach(info => {
dataList.push({
key:info.title,
value:info.id
});
});
return {dataList}
}
\ No newline at end of file
/**
* 芳华杯
*/
import moment = require("moment");
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建芳华杯信息
* @param userId
* @param param
* @returns
*/
export async function create(secureArgs) {
let {userId, form} = secureArgs;
form.id = generateSystemId(TABLEENUM.芳华杯, userId);
await addOneData(TABLEENUM.芳华杯, form);
return successResult();
}
/**
* 修改芳华杯信息
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update(secureArgs:any) {
let {userId, id, form} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.芳华杯, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.芳华杯, {id}, form);
return successResult();
}
export async function del(secureArgs:any) {
let {userId, id} = secureArgs;
let dataInfo = await findOnce(TABLEENUM.芳华杯, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.芳华杯, {id});
return successResult();
}
export async function list({desc, worksType, year}) {
let param:any = {};
if (desc) param.desc = {"$regex":`${desc}`};
if (worksType) param.worksType = worksType;
if (year) {
let st = new Date(`${year}-01-01 00:00:00`).valueOf();
let et = new Date(`${year+1}-01-01 00:00:00`).valueOf();
param["$and"] = [
{awardTime:{"$gt":st}},
{awardTime:{"$lt":et}}
];
}
let dbList = await find(TABLEENUM.芳华杯, param);
let dataList = [];
dbList.forEach(info => {
let item:any = extractData(info, ["id", "name", "works", "worksType", "awardTime", "desc"]);
// item.awardTime = moment(item.awardTime).format("YYYY-MM-DD");
dataList.push(item);
});
return dataList;
}
/**
* 回显
* @param id
*/
export async function info(secureArgs:any) {
let {id} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.芳华杯, {id});
let dataInfo = extractData(oldInfo, ["id", "name", "works", "worksType", "awardTime", "desc"]);
return { dataInfo };
}
/**
* 学术研究
*/
import { IMGEDITFUNENUM } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { addManyData } from "../../../data/add";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
/**
* 列表
* @param secureArgs
* @returns
*/
export async function list(secureArgs:any) {
let {userId} = secureArgs;
let dbList = await find(TABLEENUM.图片编辑, {type:IMGEDITFUNENUM.学术研究});
if (!dbList.length) {
/**不存在数据时需要给两个默认的数据 */
dbList = [
{ id:generateSystemId(TABLEENUM.图片编辑, userId), type:IMGEDITFUNENUM.学术研究, index:1, imgUrl:'', desc:'' },
{ id:generateSystemId(TABLEENUM.图片编辑, userId), type:IMGEDITFUNENUM.学术研究, index:2, imgUrl:'', desc:'' },
];
await addManyData(TABLEENUM.图片编辑, dbList);
}
let dataList = [];
dbList.forEach(info => {
let {id, index, imgUrl, desc} = info;
dataList.push({id, imgUrl, desc, name:`图${index}`, index});
});
return {dataList};
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update(secureArgs:any) {
let {userId, id, imgUrl, desc} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.图片编辑, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.图片编辑, {id}, {desc, imgUrl});
return successResult();
}
/**
* 逻辑删除
* @param secureArgs
* @returns
*/
export async function del(secureArgs:any) {
let {userId, id} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.图片编辑, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.图片编辑, {id}, {desc:"", imgUrl:""});
return successResult();
}
/**
* 详情
* @param secureArgs
* @returns
*/
export async function info(secureArgs:any) {
let {userId, id} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.图片编辑, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let {imgUrl, desc} = oldInfo;
return {dataInfo:{imgUrl, desc}};
}
/**
* 预览
*/
export async function preview({userId}) {
let dbList = await find(TABLEENUM.图片编辑, {type:IMGEDITFUNENUM.学术研究});
dbList.sort((a, b) => {return a.index - b.index});
let imgList = [];
dbList.forEach(info => {
let {id, index, imgUrl, desc} = info;
imgList.push({id, imgUrl, index, desc});
});
let contentList = [
{
year:2021,
month:12,
day:31,
title:'学术研究标题',
author:'张三'
},
{
year:2021,
month:12,
day:31,
title:'学术研究标题',
author:'张三'
},
{
year:2021,
month:12,
day:31,
title:'学术研究标题',
author:'张三'
},
{
year:2021,
month:12,
day:31,
title:'学术研究标题',
author:'张三'
},
{
year:2021,
month:12,
day:31,
title:'学术研究标题',
author:'张三'
}
];
return {imgList, contentList};
}
/**
* 专题系列
*/
import { ARTICLEPOSITION } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { addManyData } from "../../../data/add";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
import { changeEnumValue } from "../../../util/verificationEnum";
/**
* 列表
* @param param0
* @returns
*/
export async function list({userId}) {
let dbList = await find(TABLEENUM.专题系列, {});
let dataList = [];
if ( !dbList || !dbList.length) {
let addList = [];
for (let i = 1; i <= 5; i++) {
let id = generateSystemId(TABLEENUM.专题系列, userId);
addList.push({id, rank:i, title:'', articleUrl:'', position:0, articleTitle:'', ct:new Date().valueOf(), imgUrl:"" });
dataList.push({id, rank:i, title:'', articleUrl:'', position:0, articleTitle:'', imgUrl:""});
}
await addManyData(TABLEENUM.专题系列, addList);
}
dataList.sort((a:any, b:any) => {return a.rank - b.rank });
dbList.forEach(info => {
let item:any = extractData(info, ["id", "title", "articleUrl", "position", "articleTitle", "imgUrl"]);
if (!item.position) item.position = "未选择";
else changeEnumValue(ARTICLEPOSITION, item.position);
dataList.push(item);
});
return {dataList};
}
/**
* 预览
*/
export async function preview({userId}) {
let dbList = await find(TABLEENUM.专题系列, {});
let dataList = [];
if ( !dbList || !dbList.length) {
let addList = [];
for (let i = 1; i <= 5; i++) {
let id = generateSystemId(TABLEENUM.专题系列, userId);
addList.push({id, rank:i, title:'', articleUrl:'', position:0, articleTitle:'', ct:new Date().valueOf(), imgUrl:"" });
dataList.push({id, rank:i, title:'', articleUrl:'', position:0, articleTitle:'', imgUrl:""});
}
await addManyData(TABLEENUM.专题系列, addList);
}
dataList.sort((a:any, b:any) => {return a.rank - b.rank });
dbList.forEach(info => {
let item = extractData(info, ["id", "title", "imgUrl"]);
dataList.push(item);
});
return {dataList};
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update({userId, id, title, imgUrl, position, articleTitle, articleUrl}) {
let oldInfo = await findOnce(TABLEENUM.专题系列, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.专题系列, {id}, {title, imgUrl, articleUrl, position, articleTitle});
return successResult();
}
export async function del({userId, id}) {
let dataInfo = await findOnce(TABLEENUM.专题系列, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.专题系列, {id}, {title:'', imgUrl:'', articleUrl:''});
return successResult();
}
/**
* 回显
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM.专题系列, {id});
let dataInfo = extractData(oldInfo, ["id", "title", "imgUrl","position", "articleTitle"]);
return { dataInfo };
}
/**
* 会议通知
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建会议通知
* @param userId
* @param param
* @returns
*/
export async function create({userId, form}) {
form.ct = new Date().valueOf();
form.id = generateSystemId(TABLEENUM.会议通知, userId);
await addOneData(TABLEENUM.会议通知, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update({userId, id, form}) {
let oldInfo = await findOnce(TABLEENUM.会议通知, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.会议通知, {id}, form);
return successResult();
}
export async function del({userId, id}) {
let dataInfo = await findOnce(TABLEENUM.会议通知, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.会议通知, {id});
return successResult();
}
export async function list({userId, desc}) {
let selectParam:any = {};
if (desc) selectParam.desc = {"$regex":desc}
let dbList = await find(TABLEENUM.会议通知, selectParam);
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, ["id", "name", "st", "et", "addrest", "members", "push", "desc"]);
dataList.push(item);
});
dataList.sort((a, b) => {return a.rank - b.rank});
return dataList;
}
/**
* 回显
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM.会议通知, {id});
let dataInfo = extractData(oldInfo, ["id", "name", "st", "et", "addrest", "members", "push", "desc"]);
return { dataInfo };
}
export async function changePush({id}) {
let oldInfo = await findOnce(TABLEENUM.会议通知, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let newPush = oldInfo.push == 1 ? 0 : 1;
await updateOneData(TABLEENUM.会议通知, {id}, {push:newPush});
return successResult();
}
\ No newline at end of file
/**
* 活动通知
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建活动通知
* @param userId
* @param param
* @returns
*/
export async function create({userId, form}) {
form.ct = new Date().valueOf();
form.id = generateSystemId(TABLEENUM.活动通知, userId);
await addOneData(TABLEENUM.活动通知, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update({userId, id, form}) {
let oldInfo = await findOnce(TABLEENUM.活动通知, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.活动通知, {id}, form);
return successResult();
}
export async function del({userId, id}) {
let dataInfo = await findOnce(TABLEENUM.活动通知, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.活动通知, {id});
return successResult();
}
export async function list({userId, desc}) {
let selectParam:any = {};
if (desc) selectParam.desc = {"$regex":desc}
let dbList = await find(TABLEENUM.活动通知, selectParam);
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, ["id", "name", "st", "addrest", "members", "push", "desc"]);
dataList.push(item);
});
dataList.sort((a, b) => {return a.rank - b.rank});
return dataList;
}
/**
* 回显
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM.活动通知, {id});
let dataInfo = extractData(oldInfo, ["id", "name", "st", "addrest", "members", "push", "desc"]);
return { dataInfo };
}
export async function changePush({id}) {
let oldInfo = await findOnce(TABLEENUM.活动通知, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let newPush = oldInfo.push == 1 ? 0 : 1;
await updateOneData(TABLEENUM.活动通知, {id}, {push:newPush});
return successResult();
}
\ No newline at end of file
/**
* 项目公告
*
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建项目公告
* @param userId
* @param param
* @returns
*/
export async function create({userId, form}) {
form.ct = new Date().valueOf();
form.id = generateSystemId(TABLEENUM.项目公告, userId);
await addOneData(TABLEENUM.项目公告, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update({userId, id, form}) {
let oldInfo = await findOnce(TABLEENUM.项目公告, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.项目公告, {id}, form);
return successResult();
}
export async function del({userId, id}) {
let dataInfo = await findOnce(TABLEENUM. 项目公告, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM. 项目公告, {id});
return successResult();
}
export async function list({userId, desc}) {
let selectParam:any = {};
if (desc) selectParam.desc = {"$regex":desc}
let dbList = await find(TABLEENUM. 项目公告, selectParam);
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, ["id", "name", "st", "addrest", "members", "push", "desc"]);
dataList.push(item);
});
dataList.sort((a, b) => {return a.rank - b.rank});
return dataList;
}
/**
* 回显
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM. 项目公告, {id});
let dataInfo = extractData(oldInfo, ["id", "name", "st", "addrest", "members", "push", "desc"]);
return { dataInfo };
}
export async function changePush({id}) {
let oldInfo = await findOnce(TABLEENUM. 项目公告, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let newPush = oldInfo.push == 1 ? 0 : 1;
await updateOneData(TABLEENUM. 项目公告, {id}, {push:newPush});
return successResult();
}
\ No newline at end of file
/**
* 学会概括
*/
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { extractData } from "../../../util/piecemeal";
export async function info(secureArgs:any) {
let {userId} = secureArgs;
let dbInfo = await findOnce(TABLEENUM.学会概括, {});
if (!dbInfo || !dbInfo.id) {
dbInfo = JSON.parse(JSON.stringify({
id:generateSystemId(TABLEENUM.学会概括, userId),
title:'',
desc:'',
imgList:[],
ut:new Date().valueOf()
}));
await addOneData(TABLEENUM.学会概括, dbInfo);
}
let dataInfo = extractData(dbInfo, ["title", "desc", "imgList"]);
return {dataInfo};
}
/**
* 修改
* @param secureArgs
* @returns
*/
export async function update(secureArgs:any) {
let {userId, desc, title, imgList} = secureArgs;
await updateOneData(TABLEENUM.学会概括, {}, {desc, title, imgList});
return successResult();
}
/**
* 学会架构
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建学会架构
* @param userId
* @param param
* @returns
*/
export async function create({userId, form}) {
form.id = generateSystemId(TABLEENUM.学会架构, userId);
await addOneData(TABLEENUM.学会架构, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update( {userId, id, form}) {
let oldInfo = await findOnce(TABLEENUM.学会架构, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.学会架构, {id}, form);
return successResult();
}
/**
* 修改显示状态
* @param param0
* @returns
*/
export async function updateDisplay({userId, id}) {
let oldInfo = await findOnce(TABLEENUM.学会架构, {id});
if (!oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
let changeDisplay = oldInfo.display ? 0 : 1;
await updateOneData(TABLEENUM.学会架构, {id}, {display:changeDisplay});
return successResult();
}
/**
* 删除
* @param param0
* @returns
*/
export async function del( {userId, id}) {
let dataInfo = await findOnce(TABLEENUM.学会架构, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.学会架构, {id});
return successResult();
}
/**
* 列表
* @returns
*/
export async function list() {
let dbList = await find(TABLEENUM.学会架构, {});
let dataList = [];
dbList.forEach(info => {
let item:any = extractData(info, ["id", "departmentName", "desc", "display"]);
item.display = item.display == 1;
dataList.push(item);
});
return {dataList};
}
/**
* 回显
* @param id
*/
export async function info({id}) {
let oldInfo = await findOnce(TABLEENUM.学会架构, {id});
let dataInfo = extractData(oldInfo, [ "departmentName", "desc"]);
return { dataInfo };
}
/**
* 学会领导
* 排序,后一个排序会与修改前的排序互换
*/
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
import { TABLEENUM } from "../../../data/models/model";
import { find, findOnce } from "../../../data/select";
import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
/**
* 创建学会领导
* @param userId
* @param param
* @returns
*/
export async function create(secureArgs) {
let {userId, form} = secureArgs;
let oldRankInfo = await findOnce(TABLEENUM.学会领导, {rank:form.rank});
if(oldRankInfo && oldRankInfo.id) {
/**存在原来的排名,将上一个去掉 */
await deleteOneData(TABLEENUM.学会领导, {id:oldRankInfo.id});
}
form.id = generateSystemId(TABLEENUM.学会领导, userId);
await addOneData(TABLEENUM.学会领导, form);
return successResult();
}
/**
* 修改
* @param userId
* @param id
* @param updateParam
* @returns
*/
export async function update(secureArgs:any) {
let {userId, id, form} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.学会领导, {id});
if (!oldInfo || !oldInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
if (oldInfo.rank != form.rank) {
//排名发生变化
let oldRankInfo = await findOnce(TABLEENUM.学会领导, {rank:form.rank});
if (oldRankInfo) {
await updateOneData(TABLEENUM.学会领导, {id:oldRankInfo.id}, {rank:oldInfo.rank});
}
}
await updateOneData(TABLEENUM.学会领导, {id}, form);
return successResult();
}
export async function del(secureArgs:any) {
let {userId, id} = secureArgs;
let dataInfo = await findOnce(TABLEENUM.学会领导, {id});
if (!dataInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.学会领导, {id});
return successResult();
}
export async function list() {
let dbList = await find(TABLEENUM.学会领导, {});
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, ["id", "rank", "name", "position", "desc"]);
dataList.push(item);
});
dataList.sort((a, b) => {return a.rank - b.rank});
return {dataList};
}
/**
* 预览
* @param id
*/
export async function preview(secureArgs:any) {
/**获取上下3位的排名列表 */
let dbList = await find(TABLEENUM.学会领导, {});
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, ["id", "rank", "name", "position", "imgUrl", "miniImgUrl", "desc"]);
dataList.push(item);
});
dataList.sort((a, b) => {return a.rank - b.rank});
return {dataList};
}
/**
* 回显
* @param id
*/
export async function info(secureArgs:any) {
let {id} = secureArgs;
let oldInfo = await findOnce(TABLEENUM.学会领导, {id});
let dataInfo = extractData(oldInfo, ["id", "rank", "name", "position", "imgUrl", "miniImgUrl", "desc"]);
return { dataInfo };
}
/**
* 图片编辑表中的type
*/
export enum IMGEDITFUNENUM {
学术研究 = 1,
}
/**
* 党建栏目类型
*/
export enum PARTYBUILDTYPEENUM {
主题教育 = 1,
学习园地,
}
/**
* 党建子栏目
*/
export enum PARTYBUILDSUBTYPEENUM {
视频资料 = 1,
文字资料
}
/**
* 动态资讯子栏目
*/
export enum DONGTAIZIXUNSUBTYPE {
政策动向 = 3,
学会动态,
行业风采
}
/**
* 资料类型
*/
export enum INFORMATIONTYPEENUM {
文件类型 = 1,
视频类型
}
/**
* 通知公告
*/
export enum TONGZHIGONGGAO {
会议通知 = 1,
活动通知,
项目公告
}
/**
* 会员类型
*/
export enum MEMBERTYPE {
个人会员 = 1,
单位会员
}
/**
* 性别
*/
export enum SEX {
= 1,
,
}
/**
* 专业类别
*/
export enum PROFCATEGORY {
教育理论 = 1,
教学管理,
舞蹈,
音乐,
美术设计,
戏剧影视,
戏曲,
曲艺杂技,
舞台技术,
群众艺术,
旅游相关,
文化产业,
文化管理,
文化科技,
其他
}
/**
* 作品类型
*/
export enum TYPEOFWORKS {
作品类型1 = 1,
作品类型2,
作品类型3,
作品类型4,
作品类型5,
作品类型6
}
/**
* 内容管理banner位置
*/
export enum BANNERPOSITION {
首页_hghbanner01 = 1,
首页_hghbanner02,
首页_hghbanner03,
学会概况_hghbanner01,
学会概况_hghbanner02,
学会概况_hghbanner03,
动态资讯,
品牌项目_hghbanner01,
品牌项目_hghbanner02,
品牌项目_hghbanner03,
}
/**
* 内容管理文章位置
*/
export enum ARTICLEPOSITION {
首页_hgh学会动态 = 1,
学会概况_hgh学会规章,
动态资讯_hgh政策动向 = 3,
动态资讯_hgh学会动态,
动态资讯_hgh行业风采,
品牌项目_hgh乡村振兴,
品牌项目_hgh学术研究,
品牌项目_hgh芳华杯,
// 党建工作_hgh主题教育
}
/**
* 内容管理视频位置
*/
export enum VIDEOPOSITION {
首页_hgh热点视频 = 1,
党建工作_hgh主题教育,
党建工作_hgh工作动态,
党建工作_hgh学习交流
}
export enum YEARENUM {
_kbh2024 = 2024,
_kbh2023 = 2023,
_kbh2022 = 2022,
_kbh2021 = 2021,
_kbh2020 = 2020,
_kbh2019 = 2019,
_kbh2018 = 2018,
_kbh2017 = 2017,
_kbh2016 = 2016,
_kbh2015 = 2015,
_kbh2014 = 2014,
_kbh2013 = 2013,
_kbh2012 = 2012,
_kbh2011 = 2011,
_kbh2010 = 2010,
}
/**
* 证件类型
*/
export enum DOCUMENTTYPE {
身份证 = 1,
}
/**
* 民族
*/
export enum NATION {
汉族 = 1,
壮族,
满族,
回族,
苗族,
维吾尔族,
土家族,
彝族,
蒙古族,
藏族,
布依族,
侗族,
瑶族,
朝鲜族,
白族,
哈尼族,
哈萨克族,
黎族,
傣族,
畲族,
傈僳族,
仡佬族,
东乡族,
高山族,
拉祜族,
水族,
佤族,
纳西族,
羌族,
土族,
仫佬族,
锡伯族,
柯尔克孜族,
达斡尔族,
景颇族,
毛南族,
撒拉族,
布朗族,
塔吉克族,
阿昌族,
普米族,
鄂温克族,
怒族,
京族,
基诺族,
德昂族,
保安族,
俄罗斯族,
裕固族,
乌孜别克族,
门巴族,
鄂伦春族,
独龙族,
塔塔尔族,
赫哲族,
珞巴族
}
/**
* 参加会议成员 participant
*/
export enum CODPARTICIPANT {
会议成员1 = 1,
会议成员2,
会议成员3,
会议成员4,
会议成员5,
会议成员6,
会议成员7,
会议成员8,
会议成员9
}
/**
* 委员名单
*/
export enum COMMITTEEMEMBER {
委员1 = 1,
委员2,
委员3
}
/**
* 单位信息类型
*/
export enum UNITINFOTYPE {
类型1 = 1,
类型2,
类型3,
类型4
}
/**
* 状态
*/
export enum STATE {
= 0,
= 1
}
/**
* 下载专区分类
*/
export enum DWTYPE {
分类1 = 1,
分类2,
分类3,
分类4,
分类5,
分类6,
分类7
}
/**
* 会员状态
*/
export enum MEMBERSTATE {
正常 = 1,
异常,
冻结
}
export enum UNITMEMBERTYPE {
}
\ No newline at end of file
export enum ERRORENUM {
身份验证失败,
非法登录,
身份验证过期,
code无效,
频繁操作请稍后再试,
高风险等级用户,
系统繁忙,
请完善信息,
参数错误,
地址数据不完整,
文件上传失败,
只能上传pngjpg图片,
系统错误,
目标数据不存在,
账号或密码错误,
用户名重复,
联系人手机号重复,
邮箱重复,
两次密码不一致,
密码只能由618位字符和数字组成
}
export enum ERRORCODEENUM {
身份验证失败 = 401,
非法登录 = 402,
身份验证过期 = 403,
code无效 = 40029,
频繁操作请稍后再试 = 45011,
高风险等级用户 = 40226,
系统繁忙 = 40227
}
let bizErrorMsgMap = {};
for (let key in ERRORENUM) {
bizErrorMsgMap[ERRORENUM[key]] = key;
}
export function getBizMsg(param) {
return bizErrorMsgMap[param];
}
\ No newline at end of file
const path = require('path');
import * as fs from "fs";
import { BizError } from "../util/bizError";
import { analysisXml } from "../util/myXML";
import { ServerConfig } from "../config/systemClass";
const os = require('os');
export let systemConfig = new ServerConfig;
const ConfigName = "serverConfig.xml";
export async function initConfig() {
try {
let buff = fs.readFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), ConfigName));
let configStr = buff.toString();
let configInfo:any = await analysisXml(configStr);
if (!configInfo || !configInfo.config) throw new BizError('xml中无配置');
else {
let {port, mongodb, mysqldb, specifyDB } = configInfo.config;
systemConfig.port = parseInt(port[0]);
const MongoPath = mongodb[0].path[0];
const MongoPort = mongodb[0].port[0];
const MongoW = mongodb[0].w[0];
const MongoDataBase = mongodb[0].dataBase[0];
const MongoWtimeoutMS = mongodb[0].wtimeoutMS[0];
systemConfig.mongodbStr = analysisMongoConnectStr( MongoPath, MongoPort, MongoDataBase, MongoW, MongoWtimeoutMS);
if (mysqldb) {
let dbConfigInfo = mysqldb[0];
systemConfig.mysqldb = {host:'', port:0, user:'', pwd:'', dataBase:''};
if (dbConfigInfo.mysqlHost && dbConfigInfo.mysqlPort && dbConfigInfo.mysqlUser && dbConfigInfo.dataBase) {
systemConfig.mysqldb.host=dbConfigInfo.mysqlHost[0];
systemConfig.mysqldb.port=parseInt(dbConfigInfo.mysqlPort[0]);
systemConfig.mysqldb.user=dbConfigInfo.mysqlUser[0];
systemConfig.mysqldb.pwd=dbConfigInfo.mysqlPwd[0] || "";
systemConfig.mysqldb.dataBase=dbConfigInfo.dataBase[0];
}
}
if (specifyDB) {
systemConfig.specifyDB = specifyDB[0];
} else systemConfig.specifyDB = null;
}
console.log("config init success");
} catch(err) {
console.log('ERROR => 服务器配置解析错误 请检查根目录下 serverConfig.xml 文件是否正确');
console.log(err);
throw new BizError("服务器配置解析错误 请检查根目录下 serverConfig.xml 文件是否正确");
}
}
function analysisMongoConnectStr(path, port, dataBase, w, timeOutMs) {
return `mongodb://${path}:${port}/${dataBase}?w=${w}&wtimeoutMS=${timeOutMs}`
}
export function getEnum() {
}
\ No newline at end of file
/**
* 系统配置类
*
*/
export class ServerConfig {
/**系统配置 */
port:number;
mongodbStr:string;
specifyDB:string;//指定使用哪种数据库 mongo mysql all
mysqldb:{
host:string,
port:number,
user:string,
pwd:string,
dataBase:string
}
}
\ No newline at end of file
/**
* 添加数据相关操作
*/
import { dataModels } from "./models/modelInit";
export async function addOneData(tableEnumValue:string, data:object) {
await dataModels[tableEnumValue].addOneData(data);
return { isSuccess:true };
}
export async function addManyData(tableEnumValue:string, dataArray:object) {
await dataModels[tableEnumValue].addManyData(dataArray);
return { isSuccess:true };
}
\ No newline at end of file
import mongoose = require('mongoose');
import { initMongoModel, initMysqlModel } from '../models/modelInit';
import { ERRORENUM } from '../../config/errorEnum';
import { systemConfig } from '../../config/serverConfig';
import { BizError } from '../../util/bizError';
const Sequelize = require('sequelize');
/**
* 初始化数据库
*/
export async function initDataBaseModel() {
if (systemConfig.specifyDB == 'mongo') {
await toMongo();
} else if (systemConfig.specifyDB == 'mysql') {
await toMysql();
} else if (systemConfig.specifyDB == 'all') {
await toMongo();
await toMysql();
} else {
console.log(`this service does not use a database`);
}
}
async function toMysql() {
let {dataBase, user, pwd, host, port} = systemConfig.mysqldb;
let mysqlDB = new Sequelize(dataBase, user, pwd,{
host:host,
port:port,
dialect:'mysql', //数据库类型
pool:{ //数据库连接池
max:20, //最大连接对象的个数
min:5, //最小连接对象的个数
idle:1000 //最长等待时间,单位为毫秒
},
timezone: '+08:00', //东八时区
dialectOptions: {
dateStrings: true,
typeCast: true
},
});
await initMysqlModel(mysqlDB);
console.log(`mysql connection success, connection config:${host}:${port}/${dataBase}`);
}
async function toMongo() {
const DefaultOptions = {
useNewUrlParser:true,
auto_reconnect:true,
// reconnectTries:1000,
// reconnectInterval:3000,
keepAlive: true,
connectTimeoutMS: 3000,
useCreateIndex: true,
useUnifiedTopology: true
};
//如果配置了mongoServerConstVal 才会连接mongo
if (systemConfig.mongodbStr) {
console.log(systemConfig.mongodbStr);
let dataBase = await mongoose.createConnection(systemConfig.mongodbStr, DefaultOptions).catch(
(err)=>{
throw err
});
await initMongoModel(dataBase);
console.log(`mongodb connection success, connection config:${systemConfig.mongodbStr}`);
} else {
throw new BizError(ERRORENUM.系统错误, "xml中未配置mongo连接字符串 无法连接到mongodb");
}
}
\ No newline at end of file
/**
* 删除
*/
import { dataModels } from "./models/modelInit";
export async function deleteManyData(tableEnumValue:string, param:object) {
await dataModels[tableEnumValue].deleteManyData(param);
return {isSuccess:true};
}
export async function deleteOneData(tableEnumValue:string, param:object) {
await dataModels[tableEnumValue].deleteOneData(param);
return {isSuccess:true};
}
\ No newline at end of file
/**
* 模型列表
* tableName 字段 = 数据表名称【必有值】 使用TABLEENUM的枚举值
* source 字段 = 数据源【必有值】 可选为mongo 或者 mysql 使用枚举值
* schema字段说明
* allowNull | 是否为空 | true=可以为空
* type | 类型 | String, Number, [String], [Number]
* primaryKey | 表示主键 | true = 是主键
* autoIncrement| 自增 | 是否允许自增 true = 允许
* unique | 值唯一 | 表示值是否唯一
* default | 默认值 | 表示默认时间
* index | 索引 | true = 建立索引
*
* type类型说明
* Mongo可用 String,[String],Number,[Number],Boolean
* sql可用 String,Number,Boolean,Date
*
* association字段说明 多表关联 【数组型】【mysql用】
* 例:A表有主键aId B表有外键aId 如需要关联 应在 A的模型下加入association配置
* {type: "hasMany", check: "外键表名", foreignKey:"关联字段"},
*
* 子文档字段说明 子文档 【数组型】【mongo用】
* 例:A表下有sub字段,该字段是子文档B,如需要做关联
* ·先在模型列表中定义B模型
* ·然后A模型中的sub字段定义为[B]或B {name:"String", sub:'[B]'}
*
* 注意事项:
* 1.不通数据源的表名不可重复,也就是说即使在mysql和mongo同时存在的情况下,表名都不可以重复
*
*
* {
tableName:TABLEENUM.表名1,//数据库名称
source:TABLESOURCEENUM.mongo,
schema:{
bId:{
type:'Number',
},
name:'String',
subFile:'table2'
}
},
{
tableName:TABLEENUM.表名2,//数据库名称
source:TABLESOURCEENUM.mysql,
schema:{
aId:{
type:'Number',
},
sex:'String',
count:{type:'Number', default:1}
},
association:[]
},
*/
import { MEMBERSTATE } from "../../config/enum";
enum TABLESOURCEENUM {
mysql = 1,
mongo = 2
}
enum TABLEENUM {
学会概括 = 'xueHuiGaiKuo',
学会领导 = 'xueHuiLingDao',
学会架构 = 'xueHuiJiaGou',
图片编辑 = 'tuPianBianJi',
芳华杯 = 'fangHuaBei',
党建 = 'dangJian',
下载专区 = 'xiaZaiZhuanQu',
会议通知 = 'huiYiTongZhi',
文章管理 = 'wenZhangGuanLi',
banner管理 = 'bannerGuanLi',
视频管理 = 'shiPinGuanLi',
专题系列 = 'zhuanTiXiLie',
机构管理 = 'jiGouGuanLi',
活动通知 = 'huoDongTongZhi',
项目公告 = 'xiangMuGongGao',
工作动态 = 'gongZuoDongTai',
委员名单 = 'weiYuanMingDan',
用户表 = 'users',
文字资料 = 'wenZiZiLiao'
}
const ModelArray = [
{
tableName:TABLEENUM.学会概括,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
title:{ type:'String', default:'' },//标题
desc:{ type:'String', default:'' },//简介
imgList:{ type:'[String]', default:[] },//图片地址
ut:{ type:'Number'}//最后一次修改时间
}
},
{
tableName:TABLEENUM.学会领导,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
rank:{ type:'Number' },//排序
name:{ type:'String', default:'' },//名称
position:{ type:'String', default:'' },//职位
imgUrl:{ type:'String', default:''},//大图地址
miniImgUrl:{ type:'String', default:'' },//小图片地址
desc:{ type:'String', default:'' },//描述
ct:{ type:'Number'}//创建 时间
}
},
{
tableName:TABLEENUM.学会架构,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
departmentName:{ type:'String', default:'' },//部门名称
desc:{ type:'String', default:'' },//部门介绍
display:{ type:'Number', default:0},//是否显示
ct:{ type:'Number'}//创建 时间
}
},
{
tableName:TABLEENUM.图片编辑,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
type:'Number',//枚举 IMGEDITFUNENUM
index:'Number',
imgUrl:{type:'String', default:''},
desc:{type:'String', default:''}
}
},
{
tableName:TABLEENUM.芳华杯,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
name:'String',
works:'String',
worksType:'Number',//作品类型枚举
awardTime:'Number',//获奖时间
desc:{type:'String', default:''}
}
},
{
tableName:TABLEENUM.党建,//党建类型
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'Number', index:true },
type:'Number',//选项中的二级名称 枚举 PARTYBUILDTYPEENUM
subType:'Number',//区分学习园地的视频资源和文章资源
display:'Number',//是否在官网显示
name:'String'
}
},
{
tableName:TABLEENUM.文字资料,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
title:'String',//展示标题
rank:'Number',//排序
imgUrl:'String',//图片地址
position:'Number',//位置
articleTitle:'String',//文章标题
articleUrl:'String',//链接 前端生成
type:'Number',//分类 参考党建表>学习园地>文字资料
updateTime:'Number',//更新时间
}
},
{
tableName:TABLEENUM.文章管理,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
title:'String',//文章大标题
articleType:'[Number]',//文章类型
imgUrl:'[String]',//图片地址
articleTime:'Number',//文章时间
desc:'String',//内容
display:{type:'Number', default:0},//是否显示 使用是否的枚举
ct:'Number'
}
},
{
tableName:TABLEENUM.banner管理,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
location:'Number',//所属位置枚举 24.3.1改成单选
position:'Number',//位置
articleTitle:'String',//文章标题
imgUrl:'String',//图片地址
articleUrl:'String',//文章链接
desc:'String',//副标题
display:{type:'Number', default:0},//是否显示 使用是否的枚举
ct:'Number'
}
},
{
tableName:TABLEENUM.视频管理,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
title:'String',//大标题
videoType:'Number',//分类
videoUrl:'[String]',//视频地址
videoTime:'Number',//video时间
desc:'String',//说明
display:{type:'Number', default:0},//是否显示 使用是否的枚举
ct:'Number'
}
},
{
tableName:TABLEENUM.专题系列,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
rank:'Number',//排序 不可被修改
title:'String',//标题
position:'Number',//位置
articleTitle:'String',//文章标题
articleUrl:'String',//链接 前端生成
imgUrl:'String',
ct:'Number'
}
},
{
tableName:TABLEENUM.机构管理,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
name:'String',//机构名称
awardsCount:'Number',//获奖数量
desc:'String',//内容
rank:'Number',
logoUrl:'String',
ct:'Number'
}
},
{
tableName:TABLEENUM.会议通知,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
name:'String',//会议名称
st:'Number',
addrest:'String',
members:{type:'[Number]', default:[]},//参会会员id,用中文逗号隔开
push:'Number',//是否开启推送
desc:'String',//参会说明
ct:'Number'
}
},
{
tableName:TABLEENUM.活动通知,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
name:'String',//活动名称
st:'Number',//开始时间
addrest:'String',
members:{type:'[Number]', default:[]},//参会会员id,用中文逗号隔开
push:'Number',//是否开启推送
desc:'String',//参会说明
ct:'Number'
}
},
{
tableName:TABLEENUM.项目公告,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
name:'String',//项目名称
st:'Number',
addrest:'String',
members:{type:'[Number]', default:[]},//参会会员id,用中文逗号隔开
push:'Number',//是否开启推送
desc:'String',//项目说明
ct:'Number'
}
},
{
tableName:TABLEENUM.工作动态,
source:TABLESOURCEENUM.mongo,
schema:{
id:{type:'String', index:true },
agencyId:{type:'String', index:true},//机构id
title:'String',//标题
activityTime:'Number',//创建时间
imgUrl:'String',//图片地址
desc:'String',//内容
isUse:{type:'Number', default:0},//是否上架0表示不上架1表示上架
ct:'Number'
}
},
{
tableName:TABLEENUM.委员名单,
source:TABLESOURCEENUM.mongo,
schema:{
id:{type:'String', index:true },
agencyId:{type:'String', index:true},//机构id
name:'String',//姓名
branchDuties:'Number',//分会职务
unit:'String',//单位
unitDuties:'String',//单位职务
ct:'Number'
}
},
{
tableName:TABLEENUM.下载专区,
source:TABLESOURCEENUM.mongo,
schema:{
id:{ type:'String', index:true },
agencyId:{type:'String', index:true},//机构id
name:'String',
type:'Number',
fileUrl:'String',
ct:'Number',//创建时间
}
},
{
tableName:TABLEENUM.用户表,
source:TABLESOURCEENUM.mongo,
schema:{
userId:{ type:'String', index:true },//唯一标识
isAdmin:{ type:'Number', default:0},//是否是管理员
memberType:{type:'Number'},//会员类型
name:{type:'String'},//真实姓名
loginId:{ type:'String', index:true},//用户名
pwd:{ type:'String'},//密码
token:{type:'String', default:''},//token
tokenMs:{type:'Number', default:0},//token过期时间
phone:{type:'String', index:true},
mail:{type:'String', index:true},
sex:'Number',//性别 枚举
documentType:'Number',//证件类型 枚举
documentId:'String',//证件id
birth:'Number',//出生年月 时间戳
nation:'Number',//民族 枚举
sheng:'String',//省
shi:'String',//市
qu:'String',//区
addres:'String',//通信地址
photoUrl:'String',//证件照图片地址
workUnit:'String',//工作单位
workDuties:'String',//职务
workTitle:'String',//职称
profCategory:'Number',//专业类别
studyResume:'String',//学习简历
workResume:'String',//工作简历
profAchievement:'String',//专业成果
otherEMP:'String',//其他任职情况
otherPROF:'String',//其他专业情况
cardUrl:{type:'[String]', default:[]},//身份证正反面图片地址
academicCERTUrl:'String',//学历证明地址
professionalCERTUrl:'String',//工作证明
auxiliaryMaterial:{type:'[String]', default:[]},//其他辅助材料
memberState:{type:'Number', default:MEMBERSTATE.正常, index:true},//会员状态
joinTime:'Number',//入会时间
unitName:'String',//单位名称
officialWebsite:'String',//官网
uscc:'String',//统一信用代码
legalPerson:'String',//法人
legalPersonPhone:'String',//法人代表联系电话
gongZhongHao:'String',//单位公众号
unitPhone:'Number',//单位电话
contactPerson:'String',//日常联系人
contactPersonDuties:'String',//日常联系人职务
uusinessLicenseUrl:'String',//营业执照
personInChargeDesc:'String',//单位主要负责人或负责人集体描述
/**单位信息 */
unitInfoType:'Number',//单位信息类型 枚举
yuanXiaoBanXueLeiXing:'String',//院校办学类型
yuanXiaoZhuGuanBuMen:'String',//院校主管部门
yuanXiaoFuZeRen:'String',//院校主要负责人
yuanXiaoFuZeRenZhiWu:'String',//院校主要负责人职务
yuanXiaoFuZeRenDianHua:'String',//院校主要负责人电话
yuanXiaoBanGongFuZeRen:'String',//院校办公负责人
yuanXiaoBanGongFuZeRenZhiWu:'String',//院校办公负责人职务
yuanXiaoBanGongFuZeRenDianHua:'String',//院校办公负责人电话
yuanXiaoKeYanFuZeRen:'String',//院校办公负责人
yuanXiaoKeYanFuZeRenZhiWu:'String',//院校办公负责人职务
yuanXiaoKeYanFuZeRenDianHua:'String',//院校办公负责人电话
yuanXiaoXueShengZongRenShu:'String',//学生总人数
yuanXiaoJiaoZhiGongZongRenShu:'String',//教职工总人数
yuanXiaoJianZhuMianJi:'String',//院校建筑面积
yuanXiaoGaoJiZhiCheng:'String',// 院校职称
yuanXiaoKaiSheZhuanYe:'String',//院校开设专业数
}
},
];
export {ModelArray, TABLEENUM, TABLESOURCEENUM};
/**
* 模型控制器 根据配置初始化模型
*/
import mongoose = require('mongoose');
import { ModelArray, TABLESOURCEENUM } from './model';
import { ERRORENUM } from '../../config/errorEnum';
import { BizError } from '../../util/bizError';
/**
* 匹配mongo数据类型
* @param typeInfo
* @returns
*/
function checkTypeIsMongoDBType(typeInfo:any) {
const TypeList = ['String', '[String]', 'Number', '[Number]', 'Boolean'];
if (typeof typeInfo == 'string') {
return TypeList.indexOf(typeInfo) > -1;
} else if (typeof typeInfo == 'object') {
return TypeList.indexOf(typeInfo.type) > -1;
}
else throw new BizError(ERRORENUM.系统错误, `初始化 mongodb 的 model 时 ${typeInfo} 不可被系统识别`)
}
/**
* 校验mongo类型
* @param fileKey
* @param fileValue
* @returns
*/
function eccMongoFile(fileKey, fileValue:any) {
if (typeof fileValue == 'string') {
switch(fileValue) {
case 'String': return String;
case '[String]': return [String];
case 'Number': return Number;
case '[Number]': return [Number];
case 'Boolean': return Boolean;
// default: throw new BizError(ERRORENUM.系统错误, `${fileKey}字段类型为${fileValue} 解析失败`);
}
} else {
let fileInfo:any = {type:null};
if (fileValue.type) {
switch(fileValue.type) {
case 'String': fileInfo.type = String; break;
case '[String]': fileInfo.type = [String]; break;
case 'Number': fileInfo.type = Number; break;
case '[Number]': fileInfo.type = [Number]; break;
case 'Boolean': fileInfo.type = Boolean; break;
}
} else throw new BizError(ERRORENUM.系统错误, `${fileKey}字段缺失类型 解析失败`);
if (fileValue.index) fileInfo.index = true;
if (fileValue.default != null || fileValue.default != undefined) {
fileInfo.default = fileValue.default;
}
return fileInfo;
}
}
let dataModels = {};
/**
* 初始化mongodb数据库模型
* @param dataBase
*/
async function initMongoModel(myMongoDB:any) {
/**得到文档树 */
let modelListData = [];
let modelMapData = {};
ModelArray.forEach(info => {
let {tableName, source} = info;
if (source == TABLESOURCEENUM.mongo) {
modelMapData[tableName] = info;
modelListData.push(info);
}
});
let distinctMap = {};
function arrayToObject(array, parentKey) {
let modelSchema = {};
for (let i = 0; i < array.length; i++) {
let item = typeof array[i] == 'string' ? modelMapData[array[i]]: array[i];
let {tableName, schema} = item;
if (!parentKey) {
modelSchema[tableName] = {};
for (let key in schema) {
/**解析字段 */
let fileKey = key;
let fileValue = schema[fileKey];
if ( !checkTypeIsMongoDBType(fileValue) ) {//非基础数据类型
modelSchema[tableName][key] = arrayToObject([ modelMapData[fileValue] ], tableName);
distinctMap[fileValue] = 1;
} else {
modelSchema[tableName][key] = eccMongoFile(fileKey, fileValue);
}
}
} else {
for (let key in schema) {
/**解析子文档字段 */
let fileKey = key;
let fileValue = schema[fileKey];
if ( !checkTypeIsMongoDBType(fileValue) ) {//非基础数据类型
modelSchema[key] = arrayToObject([ modelMapData[fileValue] ], tableName);
distinctMap[fileValue] = 1;
} else {
modelSchema[key] = eccMongoFile(fileKey, fileValue);
}
}
}
}
return parentKey ? new mongoose.Schema(modelSchema) : modelSchema;
}
let tree = arrayToObject(modelListData, '');
for (let tableName in tree) {
if (distinctMap[tableName]) continue;
dataModels[tableName] = myMongoDB.model(tableName, tree[tableName]);
dataModels[tableName].addOneData = async function(data) {
return await dataModels[tableName].create(data);
}
dataModels[tableName].addManyData = async function(dataList) {
return await dataModels[tableName].insertMany(dataList);
}
dataModels[tableName].findCount = async function(param) {
return await dataModels[tableName].find(param).count();
}
dataModels[tableName].updateManyData = async function(param, updateInfo) {
return await dataModels[tableName].updateMany(param, {$set:updateInfo});
}
dataModels[tableName].updateOneData = async function(param, updateInfo) {
return await dataModels[tableName].updateOne(param, {$set:updateInfo});
}
dataModels[tableName].deleteManyData = async function(param) {
return await dataModels[tableName].deleteMany(param);
}
dataModels[tableName].deleteOneData = async function(param) {
return await dataModels[tableName].deleteOne(param);
}
}
console.log(`mongo database model init success`);
}
async function initMysqlModel(mysqlDB:any) {
/**初始化表 */
for (let i =0; i < ModelArray.length; i++) {
let { tableName, schema, source } = ModelArray[i];
if (source == TABLESOURCEENUM.mysql) {
let schemaConf = {
freezeTableName:true, //true表示使用给定的表名,false表示模型名后加s作为表名
timestamps:false //true表示给模型加上时间戳属性(createAt、updateAt),false表示不带时间戳属性
};
let model = mysqlDB.define( tableName, schema, schemaConf);
dataModels[tableName] = await model.sync({}).then();
}
}
/**初始化表关联 */
for (let i =0; i < ModelArray.length; i++) {
let { tableName, association }:any = ModelArray[i];
association = association || [];
association.forEach( (item:any) => {
if (item) {
let {type, check, foreignKey} = item;
if (type == "hasOne") {
dataModels[check].hasOne(dataModels[tableName]);
} else if (type == "hasMany") {
dataModels[tableName].hasMany(dataModels[check], {foreignKey});
}
dataModels[check].belongsTo(dataModels[tableName], {foreignKey});
}
});
}
console.log(`mysql database model init success`);
}
export {initMongoModel, initMysqlModel, dataModels};
\ No newline at end of file
import { dataModels } from "./models/modelInit";
export async function findToPage(tableEnumValue:string, param:object, files:object, pageNumber:number, pageSize?) {
pageSize = pageSize || 10;//默认每页10个
let data = await dataModels[tableEnumValue].find(param, files, pageNumber, pageSize);
return data;
}
export async function findCount(tableEnumValue:string, param:object) {
let data = await dataModels[tableEnumValue].findCount(param);
return data;
}
export async function findOnce(tableEnumValue:string, param:object, files?) {
let data = await dataModels[tableEnumValue].findOne(param, files);
return data;
}
export async function find(tableEnumValue:string, param, files?) {
files = files || [];
let data = await dataModels[tableEnumValue].find(param, files);
return data;
}
\ No newline at end of file
/**
* 修改
*/
import { dataModels } from "./models/modelInit";
export async function updateManyData(tableEnumValue:string, param:object, data:object) {
await dataModels[tableEnumValue].updateManyData(param, data);
return {isSuccess:true};
}
export async function updateOneData(tableEnumValue:string, param:object, data:object) {
await dataModels[tableEnumValue].updateOneData(param, data);
return {isSuccess:true};
}
\ No newline at end of file
import { initConfig, systemConfig} from "./config/serverConfig";
import { initDataBaseModel } from "./data/db/db";
import { httpServer } from "./net/http_server";
async function lanuch() {
/**初始化配置解析 */
await initConfig();
/**初始化数据库 */
await initDataBaseModel();
/**创建http服务 */
httpServer.createServer(systemConfig.port);
// await smsTask();
console.log('This indicates that the server is started successfully.');
}
lanuch();
\ No newline at end of file
import { ERRORENUM } from "../config/errorEnum";
import { BizError } from "../util/bizError";
var formidable = require("formidable");
const path = require('path');
export async function parseFormParam(req, res, next) {
var form = new formidable.IncomingForm();
form.uploadDir = path.join(__dirname.substring(0,__dirname.indexOf("out")), 'files');
form.parse(req, (err, fields, files)=>{
if (err) {
next(err)
}
else {
req.fields = fields;
req.files = files;
if (!files.file) {
return next(new BizError(ERRORENUM.文件上传失败) )
}
if ( files.file.type == 'image/png') {
req.fileType = '.png';
next();
} else if (files.file.type == 'image/jpg' || files.file.type == 'image/jpeg') {
req.fileType = '.jpg';
next();
} else {
return next(new BizError(ERRORENUM.只能上传pngjpg图片) )
}
}
})
}
import { bizlive } from "tencentcloud-sdk-nodejs";
import { ERRORCODEENUM } from "../config/errorEnum";
/**
* 中间件 错误返回
* @param err
* @param req
* @param res
* @param next
*/
export function httpErrorHandler(err, req, res, next) {
console.log("in httpErrorHandler");
console.log(err);
//todo 自定义错误编码
if (err) {
if ( ERRORCODEENUM[err.message] ) {
res.success({success:false, msg:err.message, code:ERRORCODEENUM[err.message]});
next();
}
else {
res.success({success:false, msg:err.message, code:500});
next();
}
}
}
\ No newline at end of file
import { ERRORENUM } from "../config/errorEnum";
import { TABLEENUM } from "../data/models/model";
import { findOnce } from "../data/select";
import { updateOneData } from "../data/update";
import { BizError } from "../util/bizError";
/**
* 中间件 校验孵化器token
* @param req
* @param res
* @param next
* @returns
*/
export async function checkFuHuaQiToken(req, res, next) {
if (!req.headers) req.headers = {};
const reqToken = req.headers.token;
const userId = req.headers.userid || "";
if (!reqToken || !userId ) return next(new BizError(ERRORENUM.身份验证失败, `userId:${userId} token:${reqToken}`));
let userInfo = await findOnce(TABLEENUM.用户表, {userId});
if (!userInfo || !userInfo.userId) return next(new BizError(ERRORENUM.身份验证失败));
if (userInfo.token != reqToken) return next(new BizError(ERRORENUM.身份验证过期));
let checkToken = '';
//30分钟更新token
if ( (userInfo.tokenMs - new Date().valueOf()) >= (30 * 60 * 1000) ) {
return next(new BizError(ERRORENUM.身份验证过期));
} else {
checkToken = reqToken;
await updateOneData(TABLEENUM.用户表, {userId:userInfo.userId}, { tokenMs:new Date().valueOf()});
}
req.headers.userInfo = {
userId,
isAdmin:userInfo.isAdmin
}
next();
}
/**
* 中间件 数据维护接口
* @param req
* @param res
* @param next
* @returns
*/
export async function checkInterior(req, res, next) {
if (!req.headers) req.headers = {};
const Sign = req.headers.sign;
let sysSign = 'sadfjslakdfjlksadjffujisdaiofjsajl09092302'
if (!Sign || Sign != sysSign) return next(new BizError(ERRORENUM.非法登录, `内部接口非法调用 ${Sign}`));
next();
}
\ No newline at end of file
export function watch(req, res, next) {
res.success = success.bind({res:res, req:req});
return next();
}
/**
* 中间件正确返回方法
* @param data
*/
function success(data) {
let resultPack;
if (data ) {
if ( data.success === undefined || data.success === true ) {
resultPack = {data, success:true, code:200};
}
else {
resultPack = data;
}
}else {
resultPack = {code:500, success:false, msg:'result is null'};
}
this.res.send(resultPack);
}
import express = require('express');
import bodyParser = require('body-parser');
import routers = require('../routers/router');
import compression = require('compression');
import { watch } from '../middleware/watch';
import { httpErrorHandler } from '../middleware/httpErrorHandler';
import * as path from "path";
import * as fallback from 'express-history-api-fallback';
export class httpServer {
static createServer(port:number) {
var httpServer = express();
httpServer.all('*', (req, res, next) => {
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('Access-Control-Allow-Headers', 'Content-Type,request-origin,userid,token');
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header('Access-Control-Allow-Credentials', true);
res.header("X-Powered-By", ' 3.2.1');
next();
// if(req.method === 'OPTIONS'){
// res.statusCode = 200;
// res.end();
// }else{
// next();
// }
});
// httpServer.use(bodyParser.json({limit:'5mb'}));
// httpServer.use(bodyParser.urlencoded({limit:'5mb', extends:true}));
httpServer.use(express.static("./static") );
httpServer.use(express.static("./files") );
const root = path.join(__dirname, "../../public");
httpServer.use(express.static(root));
httpServer.use(fallback('index.html', { root }));
httpServer.use(compression());
httpServer.use(watch);
httpServer.use(bodyParser.json({limit:"5000kb"}));
routers.setRouter(httpServer);
httpServer.use(httpErrorHandler);
httpServer.listen(port);
console.log('server listen on port:'+port);
}
}
\ No newline at end of file
import * as memberBiz from "../../biz/member/user";
export const FirstName = '用户路由';
export const FirstRouter = '/manage/member';
export const Config = {
"用户注册":[
{
apiName:"个人会员注册",
subUrl:'/signin/entity',
param:[
{key:"form", type:"Object", sub:
{
loginId:{ type:'String', desc:"用户名"},
pwd:{ type:'String', desc:"密码"},
confirmation:{type:'String', desc:"确认密码"},
phone:{type:'String', desc:"电话"},
mail:{type:'String', desc:"邮件"},
name:{type:'String', desc:"真实姓名"},
sex:{type:'Number', desc:"性别"},
documentType:{type:'Number', desc:"证件类型"},
documentId:{type:'String', desc:"证件id"},
birth:{type:'Number', desc:"出生年月 时间戳"},
nation:{type:'Number', desc:"民族"},
sheng:{type:'String', desc:"省"},
shi:{type:'String', desc:"市"},
qu:{type:'String', desc:"区"},
addres:{type:'String', desc:"通信地址"},
photoUrl:{type:'String', desc:"证件照图片地址"},
workUnit:{type:'String', desc:"工作单位"},
workDuties:{type:'String', desc:"职务"},
workTitle:{type:'String', desc:"职称"},
profCategory:{type:'Number', desc:"专业类别"},
studyResume:{type:'String', desc:"学习简历"},
workResume:{type:'String', desc:"工作简历"},
profAchievement:{type:'String', desc:"专业成果"},
otherEMP:{type:'String', desc:"其他任职情况"},
otherPROF:{type:'String', desc:"其他专业情况"},
cardUrl:{type:'[String]', desc:"身份证正反面图片地址"},
academicCERTUrl:{type:'String', desc:"学历证明地址"},
professionalCERTUrl:{type:'String', desc:"工作证明"},
auxiliaryMaterial:{type:'[String]', desc:"其他辅助材料上传地址"},
},
desc:"表单"
}
],
bindBiz:memberBiz.signInOfEntity
},
{
apiName:"单位会员注册",
subUrl:'/signin/unit',
param:[
{key:"form", type:"Object", sub:
{
loginId:{ type:'String', desc:"用户名"},
pwd:{ type:'String', desc:"密码"},
confirmation:{type:'String', desc:"确认密码"},
phone:{type:'String', desc:"电话"},
mail:{type:'String', desc:"邮件"},
unitName:{type:'String', desc:"单位名称"},
officialWebsite:{type:'String', desc:"官网"},
uscc:{type:'String', desc:"统一信用代码"},
legalPerson:{type:'String', desc:"法人"},
legalPersonPhone:{type:'String', desc:"法人代表联系电话"},
gongZhongHao:{type:'String', desc:"单位公众号"},
unitPhone:{type:'Number', desc:"单位电话"},
contactPerson:{type:'String', desc:"日常联系人"},
contactPersonDuties:{type:'String', desc:"日常联系人职务"},
uusinessLicenseUrl:{type:'String', desc:"营业执照"},
personInChargeDesc:{type:'String', desc:"单位主要负责人或负责人集体描述"},
unitInfoType:{type:'Number', desc:"单位信息类型 公用接口中获取"},
yuanXiaoBanXueLeiXing:{type:'String', desc:"院校办学类型"},
yuanXiaoZhuGuanBuMen:{type:'String', desc:"院校主管部门"},
yuanXiaoFuZeRen:{type:'String', desc:"院校主要负责人"},
yuanXiaoFuZeRenZhiWu:{type:'String', desc:"院校主要负责人职务"},
yuanXiaoFuZeRenDianHua:{type:'String', desc:"院校主要负责人电话"},
yuanXiaoBanGongFuZeRen:{type:'String', desc:"院校办公负责人"},
yuanXiaoBanGongFuZeRenZhiWu:{type:'String', desc:"院校办公负责人职务"},
yuanXiaoBanGongFuZeRenDianHua:{type:'String', desc:"院校办公负责人电话"},
yuanXiaoKeYanFuZeRen:{type:'String', desc:"院校办公负责人"},
yuanXiaoKeYanFuZeRenZhiWu:{type:'String', desc:"院校办公负责人职务"},
yuanXiaoKeYanFuZeRenDianHua:{type:'String', desc:"院校办公负责人电话"},
yuanXiaoXueShengZongRenShu:{type:'String', desc:"学生总人数"},
yuanXiaoJiaoZhiGongZongRenShu:{type:'String', desc:"教职工总人数"},
yuanXiaoJianZhuMianJi:{type:'String', desc:"院校建筑面积"},
yuanXiaoGaoJiZhiCheng:{type:'String', desc:"院校职称"},
yuanXiaoKaiSheZhuanYe:{type:'String', desc:"院校开设专业数"}
},
desc:"表单"
}
],
bindBiz:memberBiz.singInOfUnit
}
],
"登陆相关":[
{
apiName:"登陆",
subUrl:'/login',
param:[
{key:"lolginId", type:"String", desc:"账号"},
{key:"pwd", type:"String", desc:"密码"}
],
bindBiz:memberBiz.login
},
{
apiName:"注销登陆",
subUrl:'/logout',
param:[
],
bindBiz:memberBiz.logout
},
]
}
\ No newline at end of file
import * as officialWebsiteBiz from "../../biz/officialWebsite";
export const FirstName = '官网路由';
export const FirstRouter = '/officialwebsite';
export const Config = {
"首页":[
{
apiName:"banner图",
subUrl:'/banner',
param:[],
bindBiz:officialWebsiteBiz.banner
},
{
apiName:"内容",
subUrl:'/homepage',
param:[],
bindBiz:officialWebsiteBiz.homePage
},
],
"学会概况":[
{
apiName:"学会概况",
subUrl:'/xuehuigaikuang',
param:[],
bindBiz:officialWebsiteBiz.xueHuiGaiKuang
},
{
apiName:"学会概况详情",
subUrl:'/xuehuigaikuangxiangqing',
param:[],
bindBiz:officialWebsiteBiz.xueHuiGaiKuangXiangQing
},
{
apiName:"学会规章列表(更多按钮触发)",
subUrl:'/xuehuiguizhang',
param:[
{key:"pageNumber", type:"Number", desc:"当前页"},
],
bindBiz:officialWebsiteBiz.guiZhangLieBiaoFenYe
},
{
apiName:"学会规则详情",
subUrl:'/xuehuiguizhangxiangqing',
param:[
{key:"id", type:"String", desc:"规章列表下发的标识"},
],
bindBiz:officialWebsiteBiz.guiZhangZhiDuXiangQing
},
],
"动态资讯":[
{
apiName:"动态资讯列表",
subUrl:'/xuehuiguizhangxiangqing',
param:[
{key:"type", type:"Number", desc:"政策动向学会动态行业风采,参考公用接口"},
{key:"pageNumber", type:"Number", desc:"当前页"},
],
bindBiz:officialWebsiteBiz.dongTaiZiXun
},
{
apiName:"文章详情",
subUrl:'/wenzhangxiangqing',
param:[
{key:"id", type:"String", desc:"动态资讯列表中的标识"},
],
bindBiz:officialWebsiteBiz.wenZhangXiangQing
}
],
"品牌项目":[
{
apiName:"品牌项目banner",
subUrl:'/pinpaixiangmubanner',
param:[],
bindBiz:officialWebsiteBiz.pinPaiXiangMuBanner
},
{
apiName:"品牌项目信息",
subUrl:'/pinpaixiangmu',
param:[],
bindBiz:officialWebsiteBiz.pinPaiXiangMu
},
{
apiName:"学术研究列表",
subUrl:'/xueshuyanjiu',
param:[
{key:"pageNumber", type:"Number", desc:"单前页"}
],
bindBiz:officialWebsiteBiz.xueshuyanjiu
},
{
apiName:"乡村振兴列表",
subUrl:'/xiangcunzhenxing',
param:[
{key:"pageNumber", type:"Number", desc:"单前页"}
],
bindBiz:officialWebsiteBiz.xiangCunZhenXing
},
],
"党建工作":[
{
apiName:"主题教育",
subUrl:'/zhutijiaoyu',
param:[],
bindBiz:officialWebsiteBiz.zhuTiJiaoYu
},
{
apiName:"学习园地",
subUrl:'/xuexiyuandi',
param:[
{key:"type", type:"Number", desc:"类型"}
],
bindBiz:officialWebsiteBiz.xueXiYuanDi
},
{
apiName:"党建资源列表",
subUrl:'/dangjianziyuan',
param:[
{key:"first", type:"Number", desc:"一级目录 参考公用接口"},
{key:"secondary", type:"Number", desc:"二级目录 参考公用接口"},
{key:"three", type:"Number", desc:"三级目录", isNull:true},
{key:"pageNumber", type:"Number", desc:"单前页"}
],
bindBiz:officialWebsiteBiz.dangJianZiYuan
},
],
"通知公告":[
{
apiName:"主题教育",
subUrl:'/tongzhigonggao',
param:[
{key:"type", type:"Number", desc:"类型 参考公用组件"},
{key:"pageNumber", type:"Number", desc:"单前页"}
],
bindBiz:officialWebsiteBiz.tongZhiGongGao
},
]
}
\ No newline at end of file
/**
* 网站编辑路由配置
* {
apiName:"接口名称",
subUrl:'/xuehui/xuehuilingdao/add', //接口地址
param:[//参数 isNull=false 或者 notMustHave = true 可以不填 isNull=false表示可以为空 notMustHave=false 表示不可以为空
{
key:"form", type:"Object", sub:{
name:{typs:"String", notMustHave:false},
}
},
{key:"id", type:"String", isNull:false}
],
bindBiz:xueHuiLingDaoBiz.create
},
*/
import * as jiGouGuanLiBiz from '../../biz/portal/fenZhiJiGou/jiGouGuanLi';
import * as xueHuiLingDaoBiz from '../../biz/portal/xueHui/xueHuiLingDao';
import * as xueHuiGaikuoBiz from '../../biz/portal/xueHui/xueHuiGaikuo';
import * as xueHuiJiaGouBiz from '../../biz/portal/xueHui/xueHuiJiaGou';
import * as zhuanTiXiLieBiz from '../../biz/portal/shouYe/zhuanTiXiLie';
import * as xueShuYanJiuBiz from '../../biz/portal/pinPaiXiangMu/xueShuYanJiu';
import * as fangHuaBeiBiz from '../../biz/portal/pinPaiXiangMu/fangHuaBei';
import * as huiYiTongZhiBiz from '../../biz/portal/tongZhiGongGao/huiYiTongZhi';
import * as huoDongTongZhiBiz from '../../biz/portal/tongZhiGongGao/huoDongTongZhi';
import * as xiangMuGongGaoBiz from '../../biz/portal/tongZhiGongGao/xiangMuGongGao';
import * as bannerGuanLiBiz from '../../biz/portal/neiRongGuanLi/bannerGuanLi';
import * as shiPinGuanLiBiz from '../../biz/portal/neiRongGuanLi/shiPinGuanLi';
import * as wenZhangGuanLiBiz from '../../biz/portal/neiRongGuanLi/wenZhangGuanLi';
import * as xueXiYuanDiBiz from '../../biz/portal/dangJianGonZuo/xueXiYuanDi';
import * as zhuTiJiaoYuBiz from '../../biz/portal/dangJianGonZuo/zhuTiJiaoYu';
import * as wenZiZiLiaoBiz from '../../biz/portal/dangJianGonZuo/wenZiZiLiao';
import * as gongZuoDongTaiBiz from '../../biz/portal/fenZhiJiGou/gongZuoDongTai';
import * as weiYuanMingDanBiz from '../../biz/portal/fenZhiJiGou/weiYuanMingDan';
import * as xiaZaiZhuanQuBiz from '../../biz/portal/fenZhiJiGou/xiaZaiZhuanQu';
export const FirstName = '网站编辑';
export const FirstRouter = '/manage/portal';
export const Config = {
"学会概况_学会概括":[
{
apiName:"修改",
subUrl:'/xuehui/xuehuigaikuo/update',
param:[
{key:"desc", type:"String", desc:"简介"},
{key:"title", type:"String", desc:"标题"},
{key:"imgList", type:"[String]", desc:"图片地址"},
],
bindBiz:xueHuiGaikuoBiz.update
},
{
apiName:"回显",
subUrl:'/xuehui/xuehuigaikuo/info',
param:[],
bindBiz:xueHuiGaikuoBiz.info
}
],
"学会概况_学会领导":[
{
apiName:"创建学会领导",
subUrl:'/xuehui/xuehuilingdao/add',
param:[
{key:"form", type:"Object", sub:
{
rank:{type:"String", desc:"排序"},
name:{typs:"String", desc:"名称"},
position:{type:"String", desc:"职位"},
imgUrl:{type:"String", desc:"大图地址"},
miniImgUrl:{type:"String", desc:"小图地址"},
desc:{type:"String", desc:"说明"},
},
desc:"表单"
}
],
bindBiz:xueHuiLingDaoBiz.create
},
{
apiName:"修改",
subUrl:'/xuehui/xuehuilingdao/update',
param:[
{key:"form", type:"Object", sub:
{
rank:{type:"String", desc:"排序"},
name:{typs:"String", desc:"名称"},
position:{type:"String", desc:"职位"},
imgUrl:{type:"String", desc:"大图地址"},
miniImgUrl:{type:"String", desc:"小图地址"},
desc:{type:"String", desc:"说明"},
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xueHuiLingDaoBiz.update
},
{
apiName:"删除",
subUrl:'/xuehui/xuehuilingdao/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xueHuiLingDaoBiz.del
},
{
apiName:"学会领导列表",
subUrl:'/xuehui/xuehuilingdao/list',
param:[],
bindBiz:xueHuiLingDaoBiz.list
},
{
apiName:"表单回显",
subUrl:'/xuehui/xuehuilingdao/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xueHuiLingDaoBiz.info
},
{
apiName:"编辑查看页面",
subUrl:'/xuehui/xuehuilingdao/preview',
param:[],
bindBiz:xueHuiLingDaoBiz.preview
}
],
"学会概况_学会架构":[
{
apiName:"新建",
subUrl:'/xuehui/xuehuijiagou/create',
param:[
{key:"form", type:"Object", sub:
{
departmentName:{type:"String", desc:"组织名称"},
desc:{typs:"String", desc:"组织介绍"}
},
desc:"表单"
}
],
bindBiz:xueHuiJiaGouBiz.create
},
{
apiName:"删除",
subUrl:'/xuehui/xuehuijiagou/delete',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xueHuiJiaGouBiz.del
},
{
apiName:"修改",
subUrl:'/xuehui/xuehuijiagou/update',
param:[
{key:"id", type:"String", desc:"标识"},
{key:"form", type:"Object", sub:
{
departmentName:{type:"String", desc:"组织名称"},
desc:{typs:"String", desc:"组织介绍"}
},
desc:"表单"
}
],
bindBiz:xueHuiJiaGouBiz.update
},
{
apiName:"列表",
subUrl:'/xuehui/xuehuijiagou/list',
param:[],
bindBiz:xueHuiJiaGouBiz.list
},
{
apiName:"回显",
subUrl:'/xuehui/xuehuijiagou/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xueHuiJiaGouBiz.info
},
{
apiName:"改变显示状态",
subUrl:'/xuehui/xuehuijiagou/updatedisplay',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xueHuiJiaGouBiz.updateDisplay
},
],
"首页_专题系列":[
{
apiName:"列表",
subUrl:'/shouye/zhuantixilie/list',
param:[],
bindBiz:zhuanTiXiLieBiz.list
},
{
apiName:"编辑表单回显",
subUrl:'/shouye/zhuantixilie/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:zhuanTiXiLieBiz.info
},
{
apiName:"删除",
subUrl:'/shouye/zhuantixilie/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:zhuanTiXiLieBiz.del
},
{
apiName:"预览",
subUrl:'/shouye/zhuantixilie/preview',
param:[],
bindBiz:zhuanTiXiLieBiz.preview
},
{
apiName:"修改",
subUrl:'/shouye/zhuantixilie/update',
param:[
{key:"id", type:"String", desc:"标识"},
{key:"title", type:"String", desc:"展示标题"},
{key:"imgUrl", type:"String", desc:"图片地址"},
{key:"articleUrl", type:"String", desc:"文字链接"},
{key:"position", type:"Number", desc:"位置"},
{key:"articleTitle", type:"String", desc:"文章标题"}
],
bindBiz:zhuanTiXiLieBiz.update
},
],
"品牌项目_学术研究":[
{
apiName:"列表",
subUrl:'/pinpai/xueshuyanjiu/list',
param:[],
bindBiz:xueShuYanJiuBiz.list
},
{
apiName:"回显",
subUrl:'/pinpai/xueshuyanjiu/info',
param:[
{key:"id", type:"String", desc:"标识"},
],
bindBiz:xueShuYanJiuBiz.info
},
{
apiName:"删除",
subUrl:'/pinpai/xueshuyanjiu/del',
param:[
{key:"id", type:"String", desc:"标识"},
],
bindBiz:xueShuYanJiuBiz.del
},
{
apiName:"修改",
subUrl:'/pinpai/xueshuyanjiu/update',
param:[
{key:"id", type:"String", desc:"标识"},
{key:"imgUrl", type:"String", desc:"图片地址"},
{key:"desc", type:"String", desc:"图片说明"},
],
bindBiz:xueShuYanJiuBiz.update
},
{
apiName:"预览",
subUrl:'/pinpai/xueshuyanjiu/preview',
param:[],
bindBiz:xueShuYanJiuBiz.preview
}
],
"品牌项目_芳华杯":[
{
apiName:"创建",
subUrl:'/pinpai/fanghuabei/create',
param:[
{
key:"form", type:"Object", desc:"表单", sub:{
name:{type:"String", desc:"获奖者"},
works:{type:"String", desc:"获奖作品"},
worksType:{type:"Number", desc:"作品类型"},
awardTime:{type:"Number", desc:"获奖时间"},
desc:{type:"String", desc:"说明"},
}
}
],
bindBiz:fangHuaBeiBiz.create
},
{
apiName:"列表",
subUrl:'/pinpai/fanghuabei/list',
param:[
{key:"desc", type:"String", desc:"描述"},
{key:"worksType", type:"Number", desc:"获奖类型 枚举"},
{key:"year", type:"Number", desc:"获奖时间(年)"},
],
bindBiz:fangHuaBeiBiz.list
},
{
apiName:"回显",
subUrl:'/pinpai/fanghuabei/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:fangHuaBeiBiz.info
},
{
apiName:"修改",
subUrl:'/pinpai/fanghuabei/update',
param:[
{
key:"form", type:"Object", desc:"表单", sub:{
name:{type:"String", desc:"获奖者"},
works:{type:"String", desc:"获奖作品"},
worksType:{type:"Number", desc:"作品类型"},
awardTime:{type:"Number", desc:"获奖时间"},
desc:{type:"String", desc:"说明"},
}
},
{key:"id", type:"String", desc:"标识"},
],
bindBiz:fangHuaBeiBiz.update
},
{
apiName:"删除",
subUrl:'/pinpai/fanghuabei/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:fangHuaBeiBiz.del
},
],
"分支机构_机构管理":[
{
apiName:"创建",
subUrl:'/fenzhijigou/jigouguanli/add',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"名称"},
awardsCount:{type:'Number', desc:"荣誉数量"},
desc:{type:'String', desc:"描述"},
rank:{type:'Number', desc:"排序"},
logoUrl:{type:'String', desc:"logo图片地址"}
},
desc:"表单"
}
],
bindBiz:jiGouGuanLiBiz.create
},
{
apiName:"修改",
subUrl:'/fenzhijigou/jigouguanli/update',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"名称"},
awardsCount:{type:'Number', desc:"荣誉数量"},
desc:{type:'String', desc:"描述"},
rank:{type:'Number', desc:"排序"},
logoUrl:{type:'String', desc:"logo图片地址"}
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:jiGouGuanLiBiz.update
},
{
apiName:"删除",
subUrl:'/fenzhijigou/jigouguanli/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:jiGouGuanLiBiz.del
},
{
apiName:"列表",
subUrl:'/fenzhijigou/jigouguanli/list',
param:[],
bindBiz:jiGouGuanLiBiz.list
},
{
apiName:"表单回显",
subUrl:'/fenzhijigou/jigouguanli/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:jiGouGuanLiBiz.info
}
],
"通知公告_会议通知":[
{
apiName:"创建",
subUrl:'/tongzhigonggao/huiyitongzhi/add',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"会议名称"},
st:{type:'Number', desc:"开始时间时间戳"},
addrest:{type:'String', desc:"地点"},
members:{type:'[Number]', desc:"参与人员"},
push:{type:'Number', desc:'推送0表示关1表示开'},
desc:{type:'String', desc:"说明"}
},
desc:"表单"
}
],
bindBiz:huiYiTongZhiBiz.create
},
{
apiName:"修改",
subUrl:'/tongzhigonggao/huiyitongzhi/update',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"会议名称"},
st:{type:'Number', desc:"开始时间时间戳"},
addrest:{type:'String', desc:"地点"},
members:{type:'[Number]', desc:"参与人员"},
push:{type:'Number', desc:'推送0表示关1表示开'},
desc:{type:'String', desc:"说明"}
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:huiYiTongZhiBiz.update
},
{
apiName:"删除",
subUrl:'/tongzhigonggao/huiyitongzhi/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:huiYiTongZhiBiz.del
},
{
apiName:"列表",
subUrl:'/tongzhigonggao/huiyitongzhi/list',
param:[
{key:"desc", type:"String", desc:"内容关键字"}
],
bindBiz:huiYiTongZhiBiz.list
},
{
apiName:"表单回显",
subUrl:'/tongzhigonggao/huiyitongzhi/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:huiYiTongZhiBiz.info
},
{
apiName:"更改推送状态",
subUrl:'/tongzhigonggao/huiyitongzhi/changepush',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:huiYiTongZhiBiz.changePush
}
],
"通知公告_活动通知":[
{
apiName:"创建",
subUrl:'/tongzhigonggao/huodongtongzhi/add',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"活动名称"},
st:{type:'Number', desc:"开始时间"},
addrest:{type:'String', desc:"活动地点"},
push:{type:'Number', desc:'推送0表示关1表示开'},
members:{type:'[Number]', desc:"参与人员"},
desc:{type:'String', desc:"说明"}
},
desc:"表单"
}
],
bindBiz:huoDongTongZhiBiz.create
},
{
apiName:"修改",
subUrl:'/tongzhigonggao/huodongtongzhi/update',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"活动名称"},
st:{type:'Number', desc:"开始时间"},
addrest:{type:'String', desc:"地点"},
members:{type:'[Number]', desc:"参与人员"},
push:{type:'Number', desc:'推送0表示关1表示开'},
desc:{type:'String', desc:"说明"}
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:huoDongTongZhiBiz.update
},
{
apiName:"删除",
subUrl:'/tongzhigonggao/huodongtongzhi/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:huoDongTongZhiBiz.del
},
{
apiName:"列表",
subUrl:'/tongzhigonggao/huodongtongzhi/list',
param:[
{key:"desc", type:"String", desc:"内容关键字"}
],
bindBiz:huoDongTongZhiBiz.list
},
{
apiName:"表单回显",
subUrl:'/tongzhigonggao/huodongtongzhi/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:huoDongTongZhiBiz.info
},
{
apiName:"更改推送状态",
subUrl:'/tongzhigonggao/huodongtongzhi/changepush',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:huoDongTongZhiBiz.changePush
}
],
"通知公告_项目公告":[
{
apiName:"创建",
subUrl:'/tongzhigonggao/xiangmugonggao/add',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"公告名称"},
st:{type:'Number', desc:"开始时间"},
addrest:{type:'String', desc:"活动地点"},
push:{type:'Number', desc:'推送0表示关1表示开'},
members:{type:'[Number]', desc:"参与人员"},
desc:{type:'String', desc:"说明"}
},
desc:"表单"
}
],
bindBiz:xiangMuGongGaoBiz.create
},
{
apiName:"修改",
subUrl:'/tongzhigonggao/xiangmugonggao/update',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"公告名称"},
st:{type:'Number', desc:"开始时间"},
addrest:{type:'String', desc:"地点"},
push:{type:'Number', desc:'推送0表示关1表示开'},
members:{type:'[Number]', desc:"参与人员"},
desc:{type:'String', desc:"说明"}
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xiangMuGongGaoBiz.update
},
{
apiName:"删除",
subUrl:'/tongzhigonggao/xiangmugonggao/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xiangMuGongGaoBiz.del
},
{
apiName:"列表",
subUrl:'/tongzhigonggao/xiangmugonggao/list',
param:[
{key:"desc", type:"String", desc:"内容关键字"}
],
bindBiz:xiangMuGongGaoBiz.list
},
{
apiName:"表单回显",
subUrl:'/tongzhigonggao/xiangmugonggao/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xiangMuGongGaoBiz.info
},
{
apiName:"更改推送状态",
subUrl:'/tongzhigonggao/xiangmugonggao/changepush',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xiangMuGongGaoBiz.changePush
}
],
"内容管理_banner管理":[
{
apiName:"创建",
subUrl:'/neirongguanLi/bannerguanli/add',
param:[
{key:"form", type:"Object", sub:
{
location:{type:'Number', desc:'所属位置枚举'},
position:{type:'Number', desc:'文章位置'},
articleTitle:{type:'String', desc:'文章大标题'},
imgUrl:{type:'String', desc:'图片地址'},
articleUrl:{type:'String', desc:'文章链接'},
desc:{type:'String', desc:'副标题'}
},
desc:"表单"
}
],
bindBiz:bannerGuanLiBiz.create
},
{
apiName:"修改",
subUrl:'/neirongguanLi/bannerguanli/update',
param:[
{key:"form", type:"Object", sub:
{
location:{type:'Number', desc:'所属位置枚举'},
position:{type:'Number', desc:'文章位置'},
articleTitle:{type:'String', desc:'文章大标题'},
imgUrl:{type:'String', desc:'图片地址'},
articleUrl:{type:'String', desc:'文章链接'},
desc:{type:'String', desc:'副标题'}
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:bannerGuanLiBiz.update
},
{
apiName:"删除",
subUrl:'/neirongguanLi/bannerguanli/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:bannerGuanLiBiz.del
},
{
apiName:"列表",
subUrl:'/neirongguanLi/bannerguanli/list',
param:[
{key:"title", type:"String", desc:"内容关键字", isNull:true}
],
bindBiz:bannerGuanLiBiz.list
},
{
apiName:"表单回显",
subUrl:'/neirongguanLi/bannerguanli/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:bannerGuanLiBiz.info
},
{
apiName:"修改状态",
subUrl:'/neirongguanLi/bannerguanli/changeuse',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:bannerGuanLiBiz.changePush
},
],
"内容管理_视频管理":[
{
apiName:"创建",
subUrl:'/neirongguanli/shipinguanli/add',
param:[
{key:"form", type:"Object", sub:
{
title:{type:'String', desc:"大标题"},
videoType:{type:'Number', desc:"分类"},
videoUrl:{type:'[String]', desc:"图片地址"},
videoTime:{type:'Number', desc:"创建"},
desc:{type:'String', desc:"说明"}
},
desc:"表单"
}
],
bindBiz:shiPinGuanLiBiz.create
},
{
apiName:"修改",
subUrl:'/neirongguanli/shipinguanli/update',
param:[
{key:"form", type:"Object", sub:
{
title:{type:'String', desc:"大标题"},
videoType:{type:'Number', desc:"分类"},
videoUrl:{type:'[String]', desc:"图片地址"},
videoTime:{type:'Number', desc:"创建"},
desc:{type:'String', desc:"说明"}
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:shiPinGuanLiBiz.update
},
{
apiName:"删除",
subUrl:'/neirongguanli/shipinguanli/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:shiPinGuanLiBiz.del
},
{
apiName:"列表",
subUrl:'/neirongguanli/shipinguanli/list',
param:[
{key:"videoType", type:"Number", desc:"分类", isNull:true},
{key:"title", type:"String", desc:"内容关键字", isNull:true},
{key:"videoTime", type:"Number", desc:"创建时间", isNull:true},
],
bindBiz:shiPinGuanLiBiz.list
},
{
apiName:"表单回显",
subUrl:'/neirongguanli/shipinguanli/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:shiPinGuanLiBiz.info
},
{
apiName:"修改状态",
subUrl:'/neirongguanLi/shipinguanli/changeuse',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:shiPinGuanLiBiz.changePush
},
],
"内容管理_文章管理":[
{
apiName:"创建",
subUrl:'/neirongguanli/wenzhangguanli/add',
param:[
{key:"form", type:"Object", sub:
{
title:{type:'String', desc:"文章大标题"},
articleType:{type:'[Number]', desc:"文章类型"},
imgUrl:{type:'[String]', desc:"图片地址"},
articleTime:{type:'Number', desc:"文章时间"},
desc:{type:'String', desc:"内容"}
},
desc:"表单"
},
],
bindBiz:wenZhangGuanLiBiz.create
},
{
apiName:"修改",
subUrl:'/neirongguanli/wenzhangguanli/update',
param:[
{key:"form", type:"Object", sub:
{
title:{type:'String', desc:"文章大标题"},
articleType:{type:'[Number]', desc:"文章类型"},
imgUrl:{type:'[String]', desc:"图片地址"},
articleTime:{type:'Number', desc:"文章时间"},
desc:{type:'String', desc:"内容"}
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:wenZhangGuanLiBiz.update
},
{
apiName:"删除",
subUrl:'/neirongguanli/wenzhangguanli/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:wenZhangGuanLiBiz.del
},
{
apiName:"列表",
subUrl:'/neirongguanli/wenzhangguanli/list',
param:[
{key:"articleType", type:"Number", desc:"分类", isNull:true},
{key:"title", type:"String", desc:"内容关键字", isNull:true},
{key:"articleTime", type:"Number", desc:"创建时间", isNull:true},
],
bindBiz:wenZhangGuanLiBiz.list
},
{
apiName:"表单回显",
subUrl:'/neirongguanli/wenzhangguanli/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:wenZhangGuanLiBiz.info
},
{
apiName:"修改状态",
subUrl:'/neirongguanLi/wenzhangguanli/changeuse',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:wenZhangGuanLiBiz.changePush
},
{
apiName:"根据文章位置获取文章标题",
subUrl:'/neirongguanLi/wenzhangguanli/gettitle',
param:[
{key:"type", type:"Number", desc:"文章位置"}
],
bindBiz:wenZhangGuanLiBiz.getTitleList
},
],
"党建工作_学习园地":[
{
apiName:"列表",
subUrl:'/dangjiangonzuo/xuexiyuandi/list',
param:[
],
bindBiz:xueXiYuanDiBiz.list
},
{
apiName:"修改",
subUrl:'/dangjiangonzuo/xuexiyuandi/update',
param:[
{key:"id", type:"Number", desc:"标识"},
{key:"typeName", type:"String", desc:"分类名称"}
],
bindBiz:xueXiYuanDiBiz.update
},
{
apiName:"修改状态",
subUrl:'/dangjiangonzuo/xuexiyuandi/changestate',
param:[
{key:"id", type:"Number", desc:"标识"}
],
bindBiz:xueXiYuanDiBiz.changeState
}
],
"党建工作_主题教育":[
{
apiName:"列表",
subUrl:'/dangjiangonzuo/zhutijiaoyu/list',
param:[
],
bindBiz:zhuTiJiaoYuBiz.list
},
{
apiName:"修改",
subUrl:'/dangjiangonzuo/zhutijiaoyu/update',
param:[
{key:"id", type:"Number", desc:"标识"},
{key:"typeName", type:"String", desc:"分类名称"}
],
bindBiz:zhuTiJiaoYuBiz.update
},
{
apiName:"修改状态",
subUrl:'/dangjiangonzuo/zhutijiaoyu/changestate',
param:[
{key:"id", type:"Number", desc:"标识"},
],
bindBiz:zhuTiJiaoYuBiz.changeState
}
],
"党建工作_文字资料":[
{
apiName:"列表",
subUrl:'/dangjiangonzuo/wenziziliao/list',
param:[
{key:"type", type:"Number", desc:"类型"}
],
bindBiz:wenZiZiLiaoBiz.list
},
{
apiName:"编辑表单回显",
subUrl:'/dangjiangonzuo/wenziziliao/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:wenZiZiLiaoBiz.info
},
{
apiName:"删除",
subUrl:'/dangjiangonzuo/wenziziliao/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:wenZiZiLiaoBiz.del
},
{
apiName:"预览",
subUrl:'/dangjiangonzuo/wenziziliao/preview',
param:[
{key:"type", type:"Number", desc:"类型"}
],
bindBiz:wenZiZiLiaoBiz.preview
},
{
apiName:"修改",
subUrl:'/dangjiangonzuo/wenziziliao/update',
param:[
{key:"id", type:"String", desc:"标识"},
{key:"title", type:"String", desc:"展示标题"},
{key:"imgUrl", type:"String", desc:"图片地址"},
{key:"articleUrl", type:"String", desc:"文字链接"},
{key:"position", type:"Number", desc:"位置"},
{key:"articleTitle", type:"String", desc:"文章标题"},
{key:"updateTime", type:"Number", desc:"更新时间"}
],
bindBiz:wenZiZiLiaoBiz.update
},
],
"分支机构_机构管理_工作动态":[
{
apiName:"列表",
subUrl:'/fenzhijigou/jigouguanli/gongzuodongtai/list',
param:[
{key:"agencyId", type:"String", desc:"机构id"}
],
bindBiz:gongZuoDongTaiBiz.list
},
{
apiName:"回显",
subUrl:'/fenzhijigou/jigouguanli/gongzuodongtai/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:gongZuoDongTaiBiz.info
},
{
apiName:"删除",
subUrl:'/fenzhijigou/jigouguanli/gongzuodongtai/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:gongZuoDongTaiBiz.del
},
{
apiName:"修改",
subUrl:'/fenzhijigou/jigouguanli/gongzuodongtai/update',
param:[
{key:"form", type:"Object", sub:
{
title:{type:'String', desc:"标题"},
activityTime:{type:'Number', desc:"创建时间"},
imgUrl:{type:'String', desc:"图片地址"},
desc:{type:'String', desc:"内容"},
isUse:{type:'Number', desc:"是否上架0表示不上架1表示上架"},
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:gongZuoDongTaiBiz.update
},
{
apiName:"创建",
subUrl:'/fenzhijigou/jigouguanli/gongzuodongtai/add',
param:[
{key:"form", type:"Object", sub:
{
title:{type:'String', desc:"标题"},
activityTime:{type:'Number', desc:"创建时间"},
imgUrl:{type:'String', desc:"图片地址"},
desc:{type:'String', desc:"内容"},
isUse:{type:'Number', desc:"是否上架0表示不上架1表示上架"},
},
desc:"表单"
},
{key:"agencyId", type:"String", desc:"机构id"}
],
bindBiz:gongZuoDongTaiBiz.create
},
{
apiName:"修改状态",
subUrl:'/fenzhijigou/jigouguanli/gongzuodongtai/changeuse',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:gongZuoDongTaiBiz.changeUse
},
],
"分支机构_机构管理_委员名单":[
{
apiName:"列表",
subUrl:'/fenzhijigou/jigouguanli/weiyuanmingdan/list',
param:[
{key:"agencyId", type:"String", desc:"机构id"}
],
bindBiz:weiYuanMingDanBiz.list
},
{
apiName:"回显",
subUrl:'/fenzhijigou/jigouguanli/weiyuanmingdan/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:weiYuanMingDanBiz.info
},
{
apiName:"删除",
subUrl:'/fenzhijigou/jigouguanli/weiyuanmingdan/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:weiYuanMingDanBiz.del
},
{
apiName:"修改",
subUrl:'/fenzhijigou/jigouguanli/weiyuanmingdan/update',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"姓名"},
branchDuties:{type:'Number', desc:"分会职务"},
unit:{type:'String', desc:"单位"},
unitDuties:{type:'String', desc:"单位职务"}
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:weiYuanMingDanBiz.update
},
{
apiName:"创建",
subUrl:'/fenzhijigou/jigouguanli/weiyuanmingdan/add',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"姓名"},
branchDuties:{type:'Number', desc:"分会职务"},
unit:{type:'String', desc:"单位"},
unitDuties:{type:'String', desc:"单位职务"}
},
desc:"表单"
},
{key:"agencyId", type:"String", desc:"机构id"}
],
bindBiz:weiYuanMingDanBiz.create
}
],
"分支机构_机构管理_下载管理":[
{
apiName:"列表",
subUrl:'/fenzhijigou/jigouguanli/xiazaizhuanqu/list',
param:[
{key:"agencyId", type:"String", desc:"机构id"}
],
bindBiz:xiaZaiZhuanQuBiz.list
},
{
apiName:"回显",
subUrl:'/fenzhijigou/jigouguanli/xiazaizhuanqu/info',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xiaZaiZhuanQuBiz.info
},
{
apiName:"删除",
subUrl:'/fenzhijigou/jigouguanli/xiazaizhuanqu/del',
param:[
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xiaZaiZhuanQuBiz.del
},
{
apiName:"修改",
subUrl:'/fenzhijigou/jigouguanli/xiazaizhuanqu/update',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"文件名称"},
type:{type:'Number', desc:"文件类型"},
fileUrl:{type:'String', desc:"文件地址"}
},
desc:"表单"
},
{key:"id", type:"String", desc:"标识"}
],
bindBiz:xiaZaiZhuanQuBiz.update
},
{
apiName:"创建",
subUrl:'/fenzhijigou/jigouguanli/xiazaizhuanqu/add',
param:[
{key:"form", type:"Object", sub:
{
name:{type:'String', desc:"文件名称"},
type:{type:'Number', desc:"文件类型"},
fileUrl:{type:'String', desc:"文件地址"}
},
desc:"表单"
},
{key:"agencyId", type:"String", desc:"机构id"}
],
bindBiz:xiaZaiZhuanQuBiz.create
}
]
}
\ No newline at end of file
import * as enumConfig from '../../config/enum';
function setEnumInterface(enumConfig) {
let dataList = [];
for (let key in enumConfig) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
let value = enumConfig[key];
if(/_dou/.test(keyStr)) keyStr = keyStr.replace(/_dou/, ",");
if(/_zyh/.test(keyStr)) keyStr = keyStr.replace(/_zyh/, "“");
if(/_yyh/.test(keyStr)) keyStr = keyStr.replace(/_yyh/, "”");
if(/_dun/.test(keyStr)) keyStr = keyStr.replace(/_dun/, "、");
if(/_ju/.test(keyStr)) keyStr = keyStr.replace(/_ju/, "。");
if(/_hgh/.test(keyStr)) keyStr = keyStr.replace(/_hgh/, "-");
if(/_kbh/.test(keyStr)) keyStr = keyStr.replace(/_kbh/, "");
dataList.push({key:keyStr, value});
}
}
return {dataList};
}
export const FirstName = '公共接口';
export const FirstRouter = '/public';
export const Config = {
"下拉框数据":[
{
apiName:"性别",
subUrl:'/sex',
param:[],
bindBiz:setEnumInterface(enumConfig.SEX)
},
{
apiName:"会员类型",
subUrl:'/membertype',
param:[],
bindBiz:setEnumInterface(enumConfig.MEMBERTYPE)
},
{
apiName:"专业类别",
subUrl:'/profcategory',
param:[],
bindBiz:setEnumInterface(enumConfig.PROFCATEGORY)
},
{
apiName:"内容管理banner位置",
subUrl:'/position',
param:[],
bindBiz:setEnumInterface(enumConfig.BANNERPOSITION)
},
{
apiName:"内容管理文章位置",
subUrl:'/articleposition',
param:[],
bindBiz:setEnumInterface(enumConfig.ARTICLEPOSITION)
},
{
apiName:"内容管理视频位置",
subUrl:'/videoposition',
param:[],
bindBiz:setEnumInterface(enumConfig.VIDEOPOSITION)
},
{
apiName:"年筛选",
subUrl:'/years',
param:[],
bindBiz:setEnumInterface(enumConfig.YEARENUM)
},
{
apiName:"作品类型",
subUrl:'/typeofworks',
param:[],
bindBiz:setEnumInterface(enumConfig.TYPEOFWORKS)
},
{
apiName:"参会人员",
subUrl:'/codparticipant',
param:[],
bindBiz:setEnumInterface(enumConfig.CODPARTICIPANT)
},
{
apiName:"分委会职务",
subUrl:'/committeemember',
param:[],
bindBiz:setEnumInterface(enumConfig.COMMITTEEMEMBER)
},
{
apiName:"下载专区分类",
subUrl:'/dwtype',
param:[],
bindBiz:setEnumInterface(enumConfig.DWTYPE)
},
],
}
/**
* 总路由入口
*
*
* */
import { ERRORENUM } from "../config/errorEnum";
import { getDoc, initDoc } from "../tools/reqResult";
import { BizError } from "../util/bizError";
import { eccFormParam, eccReqParamater } from "../util/verificationParam";
import * as portalRouter from "./portal/router";
import * as publicRouter from "./public/router";
import * as memberRouter from "./member/router";
import * as officalWebsiteRouter from "./officalWebsite/router";
import * as asyncHandler from 'express-async-handler';
const Look = true;//true更新文档
export async function setRouter(httpServer){
if (Look) {
await getDoc();
await initDoc(portalRouter.FirstName, portalRouter.Config, portalRouter.FirstRouter);//网站编辑
await initDoc(publicRouter.FirstName, publicRouter.Config, publicRouter.FirstRouter);//公用组件
await initDoc(memberRouter.FirstName, memberRouter.Config, memberRouter.FirstRouter);//用户路由
await initDoc(officalWebsiteRouter.FirstName, officalWebsiteRouter.Config, officalWebsiteRouter.FirstRouter);//官网路由
}
await analysisRouter(httpServer, portalRouter.Config, portalRouter.FirstRouter);//网站编辑
await analysisRouter(httpServer, publicRouter.Config, publicRouter.FirstRouter);//公用组件
await analysisRouter(httpServer, memberRouter.Config, memberRouter.FirstRouter);//用户路由
await analysisRouter(httpServer, officalWebsiteRouter.Config, officalWebsiteRouter.FirstRouter);//官网路由
}
async function analysisRouter(httpServer, config, firstRouter) {
for (let modelKey in config) {
config[modelKey].forEach(info => {
let {apiName, subUrl, param, bindBiz} = info;
httpServer.post(firstRouter+subUrl, asyncHandler( async (req, res) => {
let chackObjectList = [];
let checkStringMap = {};
let stringNotMustHaveKeys = [];
let funcParam:any = {};
funcParam.userId = req.headers.userId;
for (let i = 0; i < param.length; i++) {
let info:any = param[i];
let {key, type} = param[i];
if (info.isNull) stringNotMustHaveKeys.push(key);
if (type == 'Object') {
chackObjectList.push(param[i]);
checkStringMap[key] = type;
}
else checkStringMap[key] = type;
}
/**校验参数 */
if (chackObjectList.length) {
chackObjectList.forEach(item => {
if (!req.body[item.key]) throw new BizError(ERRORENUM.参数错误, `缺少参数${item.key}`);
eccFormParam(apiName, item.sub, req.body[item.key]);
funcParam[item.key] = req.body[item.key];
});
}
if (Object.keys(checkStringMap).length) {
let eccResult = eccReqParamater(apiName, checkStringMap, req.body, stringNotMustHaveKeys);
for (let key in eccResult) {
funcParam[key] = eccResult[key];
}
}
let result;
if (firstRouter == '/public') result = await bindBiz;
else result = await bindBiz(funcParam);
res.success(result);
}));
});
}
}
\ No newline at end of file
import { systemConfig } from "../config/serverConfig";
import { postForm } from "../util/request";
const Cookie = [
'sidebar_collapsed=false',
'cookie_token=6a28392e71084032f8076d24e32fc15e6dc8532d0717f8183529ce0d9a7e0df5',
'_gitlab_session=a8de022ccd772cd40a82f6e9cc11b061',
'PHPSESSID=62mlp67e45ijp450hs9f5tt9h5',
'think_language=zh-CN'
];
let headers = {
Cookie,
Accept:"application/json, text/plain, */*",
"Accept-Encoding":"gzip, deflate",
"Content-Type":['application/x-www-form-urlencoded', 'charset=UTF-8'],
"Connection":"keep-alive",
"Accept-Language":['zh-CN,zh', 'q=0.9'],
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
Host:"123.207.147.179:2222",
Origin:"http://123.207.147.179:2222",
Referer:"http://123.207.147.179:2222/showdoc/web/"
};
const ItemId = 81;//项目id
let distinctMap = {};
export async function getDoc() {
let body = {
item_id:ItemId,
page_id: 1642
};
let result:any = await postForm('http://123.207.147.179:2222/showdoc/server/index.php?s=/api/item/info', body, headers);
result.data.menu.catalogs.forEach(info => {
let {cat_name, catalogs, cat_id} = info;//一级目录
if (!distinctMap[cat_name]) distinctMap[cat_name] = {firstId:cat_id, secondMap:{} };
catalogs.forEach(item => {
let {pages} = item;
if (!distinctMap[cat_name].secondMap[item.cat_name]) {
distinctMap[cat_name].secondMap[item.cat_name] = {secondId:item.cat_id, apiMap:{} };
}
pages.forEach(apiItem => {
let {page_title, page_id } = apiItem;
distinctMap[cat_name].secondMap[item.cat_name].apiMap[page_title] = page_id;
});
});
});
}
export async function initDoc(firstName, apiConfig, apiFirstRouter) {
let itemHeaders = Object.assign({ Accept:"application/json, text/plain, */*", "Cache-Control":"no-store, no-cache, must-revalidate, post-check=0, pre-check=0"}, headers);
/**创建一级目录 */
if (!distinctMap[firstName]) {
let addFirstParam = {
item_id:ItemId,
cat_name:firstName
};
let addFirstResult:any = await postForm('http://123.207.147.179:2222/showdoc/server/index.php?s=/api/catalog/save', addFirstParam , itemHeaders);
distinctMap[firstName] = {firstId:addFirstResult.data.cat_id, secondMap:{} };
}
for (let pKey in apiConfig) {
if (!distinctMap[firstName].secondMap[pKey]) {
/**创建二级目录 */
let addSecondParam = {
item_id:ItemId,
cat_name:pKey,
parent_cat_id:distinctMap[firstName].firstId
};
let addSecondResult:any = await postForm('http://123.207.147.179:2222/showdoc/server/index.php?s=/api/catalog/save', addSecondParam , itemHeaders);
distinctMap[firstName].secondMap[pKey] = {secondId:addSecondResult.data.cat_id, apiMap:{} };
}
let subAPIList = apiConfig[pKey];
for (let i = 0; i < subAPIList.length; i++) {
let info = subAPIList[i];
const ApiIsExistent = distinctMap[firstName].secondMap[pKey].apiMap[info.apiName];
let itemStr = `**<h4>接口描述</h4>**\n`;
itemStr += `- ${info.apiName}\n\n------\n`;
itemStr += `**<h4>接口说明</h4>**\n\n`;
itemStr += `|方式|ip|端口|URL地址|\n`;
itemStr += `|:----- |:----- |----- |-------------- |\n`;
itemStr += `|post|192.168.0.105|${systemConfig.port} |${apiFirstRouter}${info.subUrl}|\n`;
itemStr += `**<h4>接口地址</h4>**\n\n`;
itemStr += `\`http://192.168.0.105:${systemConfig.port}${apiFirstRouter}${info.subUrl}\`\n\n------\n`;
itemStr += `**<h4>请求头(headers)</h4>**\n\n`;
itemStr += `|参数名|类型|说明|\n`;
itemStr += `|:---- |:----- |----- |\n`;
itemStr += `|userid |string |用户id |\n`;
itemStr += `|token |string |登录下发的token |\n\n ------\n`;
if (!info.param || !info.param.length) {
itemStr += `**<h4>请求参数参数(body)</h4>**\n\n`;
itemStr += `· 无 \n\n ------\n`;
} else {
itemStr += `**<h4>请求参数参数(body)</h4>**\n\n`;
itemStr += `|参数名|必选|类型|说明|\n`;
itemStr += `|:----|:---|:-----|-----|\n`;
let subMap = {};
info.param.forEach(subInfo => {
let {key, type, sub, desc, isNull} = subInfo;
if (sub) {
itemStr += `|${key}|是|object| 参考 ${key}参数 |\n`;
subMap[key] = sub;
} else {
itemStr += `|${key}|${isNull == true?"否":"是"}|${type}| ${desc||''} |\n`;
}
});
itemStr += `\n------\n\n`;
for (let subMapKey in subMap) {
itemStr+=`**<h5>${subMapKey}参数</h5>**\n\n`;
itemStr += `|参数名|必选|类型|说明|\n`;
itemStr += `|:----|:---|:-----|-----|\n`;
for (let subMapItemKey in subMap[subMapKey]) {
let subMapItemValue = subMap[subMapKey][subMapItemKey];
itemStr += `|${subMapItemKey}|${subMapItemValue.notMustHave==false? '否' : '是'}|${subMapItemValue.type}| ${subMapItemValue.desc||''} |\n`;
}
itemStr += `\n\n----------------\n`;
}
}
itemStr += `**<h4>返回示例</h4>**\n`;
if (ApiIsExistent) {
let oldItemData:any = await postForm('http://123.207.147.179:2222/showdoc/server/index.php?s=/api/page/info', {page_id:ApiIsExistent} , itemHeaders);
let oldItemDataStrList = oldItemData.data.page_content.split('```');
itemStr += `\`\`\``;
let checkItemStr = oldItemDataStrList[1].replace(/&amp;/g, "");
checkItemStr = checkItemStr.replace(/&quot;/g, "");
checkItemStr = checkItemStr.replace(/&amp;/g, "");
itemStr += checkItemStr;
itemStr += `\`\`\` \n\n`;
} else {
itemStr += `\`\`\` \n`;
itemStr += ` {\n`;
itemStr += ` "code":200,//接口状态码\n`;
itemStr += ` "success":true,//响应状态\n`;
itemStr += ` "data":{//数据主体\n`;
itemStr += ` "success":true\n`;
itemStr += ` }\n`;
itemStr += ` }\n`;
itemStr += `\`\`\` \n\n`;
}
itemStr += `------\n\n`;
itemStr += `**<h4>错误码</h4>**\n\n`;
itemStr += `|code码|说明|错误原因|后续操作|\n`;
itemStr += `|:---- |:----- |:----- |----- |\n`;
itemStr += `|401 |身份验证失败 |headers中的userid错误 |强制跳转到登陆页面 |\n`;
itemStr += `|402 |非法登录 |headers中没有token或者userid |强制跳转到登陆页面 |\n`;
itemStr += `|403 |身份验证过期 |token过期 |+强制跳转到登陆页面 |\n`;
itemStr += ``;
let body = {
page_id:ApiIsExistent || 0,
item_id:ItemId,
page_title:info.apiName,
cat_id: distinctMap[firstName].secondMap[pKey].secondId,
page_content:itemStr
};
let result = await postForm('http://123.207.147.179:2222/showdoc/server/index.php?s=/api/page/save', body , itemHeaders);
console.log(`${info.apiName}文档${ApiIsExistent ? "修改 ":"创建 "}成功`);
}
}
console.log("所有接口文档已更新完毕");
}
/**
* 系统中使用的工具
* 包括 草稿箱id生成规则
* 包括 密码加密规则
*/
import moment = require("moment");
const md5 = require("md5");
/**
* 返回编辑正确的结果
* @returns
*/
export function successResult() {
return {success:true}
}
/**
* 生成系统id
* @param tableName
* @param userId
* @returns
*/
export function generateSystemId(tableName:string, userId:string) {
return md5(`${tableName}${Math.floor(Math.random() * 10000)}${userId}${new Date().valueOf()}${Math.floor(Math.random() * 100)}`);
}
/**
* 生成token
* @param userId
* @returns
*/
export function generateToken(userId:string) {
return md5(`${userId}${Math.floor(Math.random() * 10000)}${new Date().valueOf()}${Math.floor(Math.random() * 100)}`);
}
/**
* 生成userid
*/
export function generateUserId() {
return md5(`${Math.random() * 100}${new Date().valueOf()}${Math.random() * 10000}`);
}
\ No newline at end of file
const xlsx = require('node-xlsx');
const path = require('path');
/**
* onceSheetBecomeOfblockData 将excel文件的指定sheet解析成数据块数据
* @param fileName 文件名称
* @param sheetName 表名称
* @returns [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
export function onceSheetBecomeOfblockData(fileName, sheetName) {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName ));
// return sheetMap;
let thisBlockData = getBlockData(sheetMap[sheetName]);
return thisBlockData;
}
/**
* excelBecomeOfBlockData 将excel所有的sheet解析成数据块
* @param fileName 文件名称
* @returns {"sheetName1":[ {blockData:数据块(二维数组), blockTitle:"数据标题"}], ...}
*/
export function excelBecomeOfBlockData(fileName) {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName ));
let result = {};
for (let sheetName in sheetMap) {
result[sheetName] = getBlockData(sheetMap[sheetName]);
}
return result;
}
/**
* planaryArrayBecomeOfBlockData 将符合excel规则的sheet二维数组转为 数据块
* @param dataList excel解出来的数据
* @returns thisBlockData 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
export function planaryArrayBecomeOfBlockData(planaryArray) {
return getBlockData(planaryArray);;
}
//===
/**
* getBlockData 数据分块
* @param dataList 解析出来的excel二维数组
* @returns 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
function getBlockData(dataList) {
let blockList = [];
for (let i = 0; i < 999; i++) {
let {blockData, blockTitle, notItem, delDataList} = checkBlock(dataList);
if (notItem) break;
dataList = delDataList;
if (blockTitle) blockList.push({blockData, blockTitle});
}
return blockList;
}
function getListFristNotNullItemIndex(list) { //获取起始坐标
if (!list.length) return null;
for (let i = 0; i < list.length; i++) {
if (list[i]) return i;
}
}
function getListFirstNullItemIndex(startX, list) { //获取第一个为空的坐标
if (!list.length) return null;
let checkItem = false;
let firstItemIndex = 0;
for (let i = startX; i <= list.length; i++) {
let item = list[i];
if (!checkItem && item) checkItem = true;
if (checkItem && !item) {
firstItemIndex = i;
break;
}
}
return firstItemIndex;
}
function listRegionIsNull(list, startX, endX) { //指定区间内数据是否未空
let isNull = true;
if ( !list.length ) return isNull;
for (let i = startX; i < endX; i++) {
let item = list[i];
if (item) {
isNull = false;
break;
}
}
return isNull;
}
function thisListNotItem(list) {
for (let i = 0; i < list.length; i++) {
if (list[i]) return false;
}
return true
}
function checkBlock(dataList) {
//纵向有效起始点
let startY = 0;
let startX = 0;
let isNotBlockTitle = false; //没有块标题
let isLook = false;
let endX = 0;//x轴最长结束下标 【包括下标】
let blockTitle = ''; //标题块名称
let notItem = true;
for (let i = 0; i < dataList.length; i++) {
let childList = dataList[i] || [];
if (!thisListNotItem(childList)) {
if ( !isLook ) {
let thisRoowStartX = getListFristNotNullItemIndex(childList);
let thisRoowLastItem = childList[thisRoowStartX + 1];
let LastList = dataList[i+1] || [];
// let lastRoowStartX = getListFristNotNullItemIndex(LastList);
let lastRoowHaveItem = LastList[thisRoowStartX];
if ( thisRoowLastItem || (LastList.length && lastRoowHaveItem) ) {
if (lastRoowHaveItem && thisRoowLastItem ) {
isNotBlockTitle = true; //不存在标题块
blockTitle = `${thisRoowStartX}_${i}`;
startY = i;
startX = thisRoowStartX;
}
else {
blockTitle = dataList[i][thisRoowStartX];
dataList[i][thisRoowStartX] = null;
if ( thisRoowLastItem ) { // 同行存在元素 标题在y轴上
startY = i;
startX = thisRoowStartX + 1;
} else { // 同行存在元素 标题在x轴上
startY = i + 1;
startX = thisRoowStartX;
}
}
isLook = true;
} else { //只有标题 无内容
console.log(dataList[i][thisRoowStartX]);
dataList[i][thisRoowStartX] = null;
}
} else {
//测量最大连续长度
let firstNullX = getListFirstNullItemIndex(startX, childList);
if (firstNullX) endX = Math.max(endX, firstNullX-1);
break;
}
notItem = false;
}
}
let endY = 0;//y轴连续下标 【包括下标】
let yInfoStart = false;
let yInfoEnd = false;
for (let y = startY; y < dataList.length; y++) {
//纵向找连续性
let thisRoow = dataList[y];
let regionIsNull = listRegionIsNull(thisRoow, startX, endX);
if (!regionIsNull) {
endY = y;
if (!yInfoStart) yInfoStart = true;
}
if (yInfoStart && regionIsNull) yInfoEnd = true;
if (yInfoEnd) break;
}
let blockData = [];
for (let y = startY; y <= endY; y++) {
let onceList = [];
for (let x = startX; x <= endX; x++) {
onceList.push(dataList[y][x]);
dataList[y][x] = null;
}
blockData.push(onceList);
}
return {blockData, blockTitle, delDataList:dataList,notItem};
}
//获取单个excel文件的数据
function getExcel(filePath) {
const workSheetsFromFile = xlsx.parse(filePath);
let sheetMap = {};
let sheetList = [];
for (let i = 0; i < workSheetsFromFile.length; i++) {
let sheetInfo = workSheetsFromFile[i];
sheetMap[sheetInfo.name] = sheetInfo.data;
sheetList.push(sheetInfo);
}
return {sheetMap, sheetList}
}
\ No newline at end of file
/**
* 异常类
* 需要和log4js共同使用
*/
import { getBizMsg } from "../config/errorEnum";
import { logError } from "./log";
export class BizError extends Error {
constructor(...msgs) {
let reqErrorMsg = '';
let logErrorMsg = '';
for (let i = 0; i <msgs.length; i++) {
if (!i) {
let msg = getBizMsg(msgs[i]);
reqErrorMsg = msg;
logErrorMsg = msg;
} else {
logErrorMsg += ` | ${msgs[i]} `;
}
}
logError(logErrorMsg);
super(reqErrorMsg);
}
}
/**
* 日志类
* 包括错误日志 普通日志
* 日志存放在根目录的logs内
*/
let log4js = require('log4js');
let path = require('path');
//log路径
export const systemLogPath = {
errorLogFile:"error",
errorLogDir:"error",
handleLogFile:"handle",
handleLogDir:"handle"
}
//日志根目录
// let baseLogPath = path.resolve(__dirname.substring(0, __dirname.indexOf("out")), 'logs');
let baseLogPath = path.resolve('./', 'logs');
let errFile = path.resolve(baseLogPath, systemLogPath.errorLogDir, systemLogPath.errorLogFile);
let handFile =path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile);
let config = {
appenders:
{
"rule-console": {"type": "console"},
"errorLogger": {
"type": "dateFile", // 日志类型
"filename": errFile, // 输出文件名
"pattern": "yyyy-MM-dd.log", // 后缀
"alwaysIncludePattern": true, // 上面两个参数是否合并
"encoding": "utf-8", // 编码格式
"maxLogSize": 1000, // 最大存储内容
"numBackups": 3, // 当文件内容超过文件存储空间时,备份文件的数量
"path": `/${systemLogPath.errorLogDir}`
},
"handleLogger": {
"type": "dateFile",
"filename": handFile,
"pattern": "yyyy-MM-dd.log",
"alwaysIncludePattern": true,
"encoding": "utf-8",
"maxLogSize": 1000,
"numBackups": 3,
"path": `/${systemLogPath.handleLogDir}`
}
},
categories: {
"default": {"appenders": ["rule-console"], "level": "all"}, //这个配置一定要有
"errorLogger": {"appenders": ["errorLogger"], "level": "error"},
"handleLogger": {"appenders": ["handleLogger"], "level": "all"}
},
"baseLogPath": path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile)
};
log4js.configure(config); //加载配置文件
//调用预先定义的日志名称
let errorLogger = log4js.getLogger("errorLogger");
let handleLogger = log4js.getLogger("handleLogger");
let consoleLogger = log4js.getLogger("rule-console");
//错误日志
export function logError(...errStrs) {
let str = "";
errStrs.forEach(item => {
str += item + " | ";
});
errorLogger.error(`errorInfo => ${str}`);
}
//普通日志
export function logHandle(msgStr:string) {
handleLogger.info(`logInfo => ${msgStr}`);
}
//输出日志
export function logConsole(logStr:string) {
consoleLogger.info(`logInfo => ${logStr}`);
}
/**
* 解析xml
*/
var xml2js = require("xml2js");
/**
*
* @param str 需要解析的xml文本
* @returns 解析好的对象
*/
export function analysisXml(str) {
return new Promise( (resolve, reject) => {
xml2js.parseString(str, (err, result) => {
if (err) return reject(err);
return resolve(result);
});
});
}
\ No newline at end of file
/**
* 零碎的通用工具
*/
import moment = require("moment");
/**
* 匹配新旧对象变化
* 将newObj 与 oldObj 比对,将newObj中发生变化的key返回
* 使用前需要校验对象中的内容
* @param newObj 新对象
* @param oldObj 旧对象
* @returns [key] 发生变化的key
*/
export function checkChange(newObj, oldObj) {
let changeKeyList = [];
for (let newKey in newObj) {
if (`${newObj[newKey]}` != `${oldObj[newKey]}`) changeKeyList.push(newKey);
}
return changeKeyList;
}
/**
* 根据conf截取data中的数据
* @param data
* @param conf
* @returns
*/
export function extractData(data, conf) {
if (!conf.length) conf = Object.keys(data);
let result = {};
conf.forEach(key => {
result[key] = data[key];
});
return result;
}
/**
* 校验数据对象是否有空
* @param data
* @param sensitive 敏感校验 true时 0 和 ""会校验失败 false时 校验成功
* @returns true/false true = 有空值 false=无空值
*/
export function checkDataHaveNull(data:object, sensitive:boolean) {
if (Array.isArray(data)) return data.length == 0;
if (Object.keys(data).length == 0) return true;
let success = false;
for (let key in data) {
if (data[key] == null || data[key] == undefined) success = true;
if (sensitive) {
if (data[key] === 0 || data[key] === "" ) success = true;
}
}
return success;
}
\ No newline at end of file
/**
* 请求工具
*/
import * as request from 'request';
import { BizError } from './bizError';
/**
* 请求接口(get)
* @param url 路由
* @param query 请求参数
* @param headers 请求头
* @returns
*/
export function get(url:string, query?, headers?) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
let paramater:any = { url, json:true };
if (query) paramater.qs = query;
if (headers) paramater.headers = headers;
request.get(paramater, function (err, r, body) {
if (err) return reject(err);
if (r && r.statusCode != 200) return reject(new Error('httpError:'+r.statusCode));
resolve(body);
});
})
}
export function post(url, body, headers) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
let header = {"content-type": "application/json"};
return new Promise((resolve, reject)=>{
request({
url: url,
method: "POST",
json: true,
headers: Object.assign(header, headers),
body: body
}, function(error, response, body) {
if (!error && response.statusCode == 200) {
resolve(body);
}
else {
// reject(error)
}
});
})
}
export function postForm(url, body, headers) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
request({
url: url,
method: "POST",
json: true,
form:body,
headers
}, function(error, response, res) {
if (!error) {
resolve(res);
}
else {
reject(error)
}
});
})
}
/**
* 校验枚举工具
*
*/
import { ERRORENUM } from "../config/errorEnum";
import { BizError } from "./bizError";
/**
* 校验value是否符合传入的枚举
* @param name 被调用名称 用于输出异常日志
* @param key 目标字段 用于输出异常日志
* @param enumConf 目标枚举
* @param value 目标值
* 无返回 有异常直接报错
*/
export function eccEnumValue(name:string, key:string, enumConf, value:any) {
let eccSuccess = true;
if ( typeof value == 'number' ) {
if (!enumConf[value] ) eccSuccess = false;
} else if (Array.isArray(value)) {
value.forEach(item => {
if ( !enumConf[item] ) eccSuccess = false;
});
}
if (!eccSuccess) throw new BizError(ERRORENUM.请完善信息, `${name} 下的 ${key} 字段值为 ${value} 不满足枚举范围`);
}
/**
* 将枚举值转换成对应的枚举名(key)
* @param enumConf 目标枚举
* @param value 目标值
* @returns string 返回字符串 如果传入多个枚举值,就拼接字符串
*/
export function changeEnumValue(enumConf, value:any) {
if (!value) return '';
if ( typeof value == 'number' ) {
let str = enumConf[value];
/** 特化处理 中文引号在枚举中不适用*/
if (str == "_投资__孵化_类型") {
str = str.replace("__","+");
str = str.replace("_","“");
str = str.replace("_","”");
}
if (str == "经营成本过高_场地成本或人员成本_" || str == "办公空间拓展_无合适办公空间_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
if (str == "迁出孵化器_仍在张江" || str == "迁出张江_仍在浦东" || str == "迁出浦东_仍在上海") {
str = str.replace("_",",");
}
if (str == "科技金融_风险投资_" || str == "科技金融_其他_" || str == "技术专家_法律专家_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
return str
}
let str = "";
value.forEach((item, index) => {
let subStr = enumConf[item];
/** 特化处理 中文引号在枚举中不适用*/
if (subStr == "_投资__孵化_类型") {
subStr = subStr.replace("__","+");
subStr = subStr.replace("_","“");
subStr = subStr.replace("_","”");
}
if (subStr == "经营成本过高_场地成本或人员成本_" || subStr == "办公空间拓展_无合适办公空间_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
if (subStr == "迁出孵化器_仍在张江" || subStr == "迁出张江_仍在浦东" || subStr == "迁出浦东_仍在上海") {
subStr = subStr.replace("_",",");
}
if (subStr == "科技金融_风险投资_" || subStr == "科技金融_其他_" || subStr == "技术专家_法律专家_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
str += subStr;
if (index == value.length-1) str+="";
else str += ","
});
return str;
}
\ No newline at end of file
/**
* 校验参数工具
*
*/
import { ERRORENUM } from "../config/errorEnum";
import { BizError } from "./bizError";
/**
* 通过config校验表单参数param
* 包括类型 String, Number, Boolean, [Number], [Object]
* 参数是必填
* 方法会校验表单中存在的多余字段
* @param name 被调用的方法名
* @param config 校验配置
* @param param 需要校验的参数
* @returns true 无需关注返回
*/
export function eccFormParam(name:string, keyTypeConf:object, param:object) {
/**校验多余字段 */
for (let key in param) {
if (!keyTypeConf[key]) throw new BizError(ERRORENUM.参数错误, name, `多余${key}字段`);
}
/**校验已填参数 */
for (let key in keyTypeConf ) {
let {type, notMustHave} = keyTypeConf[key];
let isError = false; //校验是否异常
let errorStr = "";//异常说明
let value = param[key];
let valueType = typeof value;
if ( value == null || value == undefined ) {
if (!notMustHave) throw new BizError(ERRORENUM.参数错误, name, `缺失${key}字段`);
} else {
switch(type) {
case 'Number':
if ( type.toLowerCase() != valueType ) {
isError = true;
} else {
if ((""+param[key]).indexOf('.') > -1) {
param[key] = parseInt(`${param[key] *1000}`)/1000;
}
}
break;
case 'String':
case 'Boolean':
if ( type.toLowerCase() != valueType ) isError = true;
break;
case '[Number]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'number' ) {
isError = true;
errorStr = `${key}应是number型数组其中下标${i}${typeof item}`;
}
}
break;
case '[Object]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'object' ) {
isError = true;
errorStr = `${key}应是object型数组其中下标${i}${typeof item}`;
}
}
break;
case 'Address':
/**地址类型 基本数据类型为数组字符串但是要判断层级关系 */
if ( !Array.isArray(param[key]) ) {
isError = true;
errorStr = `${key}应是数组形`;
}
if ( param[key].length != 4) {
isError = true;
errorStr = `${key}超过特定长度4 目前长度 ${param[key].length}`;
}
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是string型数组其中下标${i}${typeof item}`;
}
}
/** 不符合规则的 */
let nullIndex = -1;
for (let i = 0; i < param[key].length; i++) {
if (nullIndex != -1) {//出现过空 第一次出现后的位置 都不能有值
if (param[key]) {
//做一个特化
throw new BizError(ERRORENUM.地址数据不完整, name, `${key} 下标 ${nullIndex} 为空 `);
}
}
if (nullIndex == -1 && !param[key][i]) {
/**按顺序第一次赋值 */
nullIndex = i;
}
}
break;
}
errorStr = isError && errorStr == "" ? `${key}应该是${type}型 而不是${valueType}`: errorStr;
if ( isError ) throw new BizError(ERRORENUM.请完善信息, name, errorStr);
}
}
return true;
}
/**
* 根据conf配置校验请求参数
* @param conf 配置
* @param param 表单
* @param skipKeys []不必填的字段
*/
export function eccReqParamater(apiName:string, conf:object, param, skipKeys?) {
skipKeys = skipKeys || [];
let skipMap = {};
skipKeys.forEach(keyName => {
skipMap[keyName] = 1;
});
/**校验多余字段 */
for (let key in param) {
if (!conf[key]) throw new BizError(ERRORENUM.参数错误, apiName,`多余${key}字段`);
}
/**校验必填和缺失字段 */
for (let key in conf) {
let confType = conf[key];
let value = param[key];
let valueType = typeof value;
if ( value == null || value == undefined ) {
if (!skipMap[key]) throw new BizError(ERRORENUM.参数错误, apiName,`缺失${key}字段`);
} else {
let isError = false;
let errorStr = "";
switch(confType) {
case 'Number':
if ( confType.toLowerCase() != valueType ) isError = true;
else {
if ((""+param[key]).indexOf('.') > -1) {
param[key] = parseInt(`${param[key] *100}`)/100;
}
}
break;
case 'String':
case 'Boolean':
if ( confType.toLowerCase() != valueType ) isError = true;
break;
case '[Number]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'number' ) {
isError = true;
errorStr = `${key}应是number型数组其中下标${i}${typeof item}`;
}
}
break;
case '[Object]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'object' ) {
isError = true;
errorStr = `${key}应是object型数组其中下标${i}${typeof item}`;
}
}
break;
case 'Address':
/**地址类型 基本数据类型为数组字符串但是要判断层级关系 */
if ( !Array.isArray(param[key]) ) {
isError = true;
errorStr = `${key}应是数组形`;
}
if ( param[key].length != 4) {
isError = true;
errorStr = `${key}超过特定长度4 目前长度 ${param[key].length}`;
}
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是string型数组其中下标${i}${typeof item}`;
}
}
/** 不符合规则的 */
let nullIndex = -1;
for (let i = 0; i < param[key].length; i++) {
if (nullIndex != -1) {//出现过空 第一次出现后的位置 都不能有值
if (param[key]) {
//做一个特化
throw new BizError(ERRORENUM.地址数据不完整,apiName, `${key} 下标 ${nullIndex} 为空 `);
}
}
if (nullIndex == -1 && !param[key][i]) {
/**按顺序第一次赋值 */
nullIndex = i;
}
}
break;
}
errorStr = isError && errorStr == "" ? `${key}应该是${confType}型 而不是${valueType}`: errorStr;
if (isError) throw new BizError(ERRORENUM.参数错误, apiName, errorStr);
}
}
return param;
}
\ No newline at end of file
{
"compilerOptions": {
"module": "commonjs",
"target": "es2017",
"sourceMap": true,
"rootDir":"./src",
"outDir":"./out"
},
"exclude": [
"node_modules"
]
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment