156 lines
80 KiB
JavaScript
156 lines
80 KiB
JavaScript
"use strict";
|
||
/*
|
||
* ATTENTION: An "eval-source-map" devtool has been used.
|
||
* This devtool is neither made for production nor for readable output files.
|
||
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
||
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||
* or disable the default devtool with "devtool: false".
|
||
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||
*/
|
||
(() => {
|
||
var exports = {};
|
||
exports.id = "app/api/contracts/route";
|
||
exports.ids = ["app/api/contracts/route"];
|
||
exports.modules = {
|
||
|
||
/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js":
|
||
/*!*************************************************************************!*\
|
||
!*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***!
|
||
\*************************************************************************/
|
||
/***/ ((module) => {
|
||
|
||
module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "next/dist/compiled/next-server/app-route.runtime.dev.js":
|
||
/*!**************************************************************************!*\
|
||
!*** external "next/dist/compiled/next-server/app-route.runtime.dev.js" ***!
|
||
\**************************************************************************/
|
||
/***/ ((module) => {
|
||
|
||
module.exports = require("next/dist/compiled/next-server/app-route.runtime.dev.js");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "buffer":
|
||
/*!*************************!*\
|
||
!*** external "buffer" ***!
|
||
\*************************/
|
||
/***/ ((module) => {
|
||
|
||
module.exports = require("buffer");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "crypto":
|
||
/*!*************************!*\
|
||
!*** external "crypto" ***!
|
||
\*************************/
|
||
/***/ ((module) => {
|
||
|
||
module.exports = require("crypto");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "fs":
|
||
/*!*********************!*\
|
||
!*** external "fs" ***!
|
||
\*********************/
|
||
/***/ ((module) => {
|
||
|
||
module.exports = require("fs");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "path":
|
||
/*!***********************!*\
|
||
!*** external "path" ***!
|
||
\***********************/
|
||
/***/ ((module) => {
|
||
|
||
module.exports = require("path");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "sql.js":
|
||
/*!*************************!*\
|
||
!*** external "sql.js" ***!
|
||
\*************************/
|
||
/***/ ((module) => {
|
||
|
||
module.exports = require("sql.js");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "stream":
|
||
/*!*************************!*\
|
||
!*** external "stream" ***!
|
||
\*************************/
|
||
/***/ ((module) => {
|
||
|
||
module.exports = require("stream");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "util":
|
||
/*!***********************!*\
|
||
!*** external "util" ***!
|
||
\***********************/
|
||
/***/ ((module) => {
|
||
|
||
module.exports = require("util");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fcontracts%2Froute&page=%2Fapi%2Fcontracts%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fcontracts%2Froute.js&appDir=D%3A%5Chaomi%5Ccodex_projects%5CcontractApproval%5Csrc%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=D%3A%5Chaomi%5Ccodex_projects%5CcontractApproval&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!":
|
||
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fcontracts%2Froute&page=%2Fapi%2Fcontracts%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fcontracts%2Froute.js&appDir=D%3A%5Chaomi%5Ccodex_projects%5CcontractApproval%5Csrc%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=D%3A%5Chaomi%5Ccodex_projects%5CcontractApproval&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***!
|
||
\*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ patchFetch: () => (/* binding */ patchFetch),\n/* harmony export */ requestAsyncStorage: () => (/* binding */ requestAsyncStorage),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ serverHooks: () => (/* binding */ serverHooks),\n/* harmony export */ staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-route/module.compiled */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js\");\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/server/lib/patch-fetch */ \"(rsc)/./node_modules/next/dist/server/lib/patch-fetch.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var D_haomi_codex_projects_contractApproval_src_app_api_contracts_route_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./src/app/api/contracts/route.js */ \"(rsc)/./src/app/api/contracts/route.js\");\n\n\n\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppRouteRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_ROUTE,\n page: \"/api/contracts/route\",\n pathname: \"/api/contracts\",\n filename: \"route\",\n bundlePath: \"app/api/contracts/route\"\n },\n resolvedPagePath: \"D:\\\\haomi\\\\codex_projects\\\\contractApproval\\\\src\\\\app\\\\api\\\\contracts\\\\route.js\",\n nextConfigOutput,\n userland: D_haomi_codex_projects_contractApproval_src_app_api_contracts_route_js__WEBPACK_IMPORTED_MODULE_3__\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks } = routeModule;\nconst originalPathname = \"/api/contracts/route\";\nfunction patchFetch() {\n return (0,next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__.patchFetch)({\n serverHooks,\n staticGenerationAsyncStorage\n });\n}\n\n\n//# sourceMappingURL=app-route.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZhcGklMkZjb250cmFjdHMlMkZyb3V0ZSZwYWdlPSUyRmFwaSUyRmNvbnRyYWN0cyUyRnJvdXRlJmFwcFBhdGhzPSZwYWdlUGF0aD1wcml2YXRlLW5leHQtYXBwLWRpciUyRmFwaSUyRmNvbnRyYWN0cyUyRnJvdXRlLmpzJmFwcERpcj1EJTNBJTVDaGFvbWklNUNjb2RleF9wcm9qZWN0cyU1Q2NvbnRyYWN0QXBwcm92YWwlNUNzcmMlNUNhcHAmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZyb290RGlyPUQlM0ElNUNoYW9taSU1Q2NvZGV4X3Byb2plY3RzJTVDY29udHJhY3RBcHByb3ZhbCZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXNHO0FBQ3ZDO0FBQ2M7QUFDK0I7QUFDNUc7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdIQUFtQjtBQUMzQztBQUNBLGNBQWMseUVBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFlBQVk7QUFDWixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxpRUFBaUU7QUFDekU7QUFDQTtBQUNBLFdBQVcsNEVBQVc7QUFDdEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUN1SDs7QUFFdkgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb250cmFjdC1hcHByb3ZhbC1zeXN0ZW0vP2YzN2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwUm91dGVSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1yb3V0ZS9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1raW5kXCI7XG5pbXBvcnQgeyBwYXRjaEZldGNoIGFzIF9wYXRjaEZldGNoIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL3BhdGNoLWZldGNoXCI7XG5pbXBvcnQgKiBhcyB1c2VybGFuZCBmcm9tIFwiRDpcXFxcaGFvbWlcXFxcY29kZXhfcHJvamVjdHNcXFxcY29udHJhY3RBcHByb3ZhbFxcXFxzcmNcXFxcYXBwXFxcXGFwaVxcXFxjb250cmFjdHNcXFxccm91dGUuanNcIjtcbi8vIFdlIGluamVjdCB0aGUgbmV4dENvbmZpZ091dHB1dCBoZXJlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGluIHRoZSByb3V0ZVxuLy8gbW9kdWxlLlxuY29uc3QgbmV4dENvbmZpZ091dHB1dCA9IFwiXCJcbmNvbnN0IHJvdXRlTW9kdWxlID0gbmV3IEFwcFJvdXRlUm91dGVNb2R1bGUoe1xuICAgIGRlZmluaXRpb246IHtcbiAgICAgICAga2luZDogUm91dGVLaW5kLkFQUF9ST1VURSxcbiAgICAgICAgcGFnZTogXCIvYXBpL2NvbnRyYWN0cy9yb3V0ZVwiLFxuICAgICAgICBwYXRobmFtZTogXCIvYXBpL2NvbnRyYWN0c1wiLFxuICAgICAgICBmaWxlbmFtZTogXCJyb3V0ZVwiLFxuICAgICAgICBidW5kbGVQYXRoOiBcImFwcC9hcGkvY29udHJhY3RzL3JvdXRlXCJcbiAgICB9LFxuICAgIHJlc29sdmVkUGFnZVBhdGg6IFwiRDpcXFxcaGFvbWlcXFxcY29kZXhfcHJvamVjdHNcXFxcY29udHJhY3RBcHByb3ZhbFxcXFxzcmNcXFxcYXBwXFxcXGFwaVxcXFxjb250cmFjdHNcXFxccm91dGUuanNcIixcbiAgICBuZXh0Q29uZmlnT3V0cHV0LFxuICAgIHVzZXJsYW5kXG59KTtcbi8vIFB1bGwgb3V0IHRoZSBleHBvcnRzIHRoYXQgd2UgbmVlZCB0byBleHBvc2UgZnJvbSB0aGUgbW9kdWxlLiBUaGlzIHNob3VsZFxuLy8gYmUgZWxpbWluYXRlZCB3aGVuIHdlJ3ZlIG1vdmVkIHRoZSBvdGhlciByb3V0ZXMgdG8gdGhlIG5ldyBmb3JtYXQuIFRoZXNlXG4vLyBhcmUgdXNlZCB0byBob29rIGludG8gdGhlIHJvdXRlLlxuY29uc3QgeyByZXF1ZXN0QXN5bmNTdG9yYWdlLCBzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLCBzZXJ2ZXJIb29rcyB9ID0gcm91dGVNb2R1bGU7XG5jb25zdCBvcmlnaW5hbFBhdGhuYW1lID0gXCIvYXBpL2NvbnRyYWN0cy9yb3V0ZVwiO1xuZnVuY3Rpb24gcGF0Y2hGZXRjaCgpIHtcbiAgICByZXR1cm4gX3BhdGNoRmV0Y2goe1xuICAgICAgICBzZXJ2ZXJIb29rcyxcbiAgICAgICAgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZVxuICAgIH0pO1xufVxuZXhwb3J0IHsgcm91dGVNb2R1bGUsIHJlcXVlc3RBc3luY1N0b3JhZ2UsIHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UsIHNlcnZlckhvb2tzLCBvcmlnaW5hbFBhdGhuYW1lLCBwYXRjaEZldGNoLCAgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fcontracts%2Froute&page=%2Fapi%2Fcontracts%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fcontracts%2Froute.js&appDir=D%3A%5Chaomi%5Ccodex_projects%5CcontractApproval%5Csrc%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=D%3A%5Chaomi%5Ccodex_projects%5CcontractApproval&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(rsc)/./src/app/api/contracts/route.js":
|
||
/*!****************************************!*\
|
||
!*** ./src/app/api/contracts/route.js ***!
|
||
\****************************************/
|
||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GET: () => (/* binding */ GET),\n/* harmony export */ POST: () => (/* binding */ POST),\n/* harmony export */ dynamic: () => (/* binding */ dynamic)\n/* harmony export */ });\n/* harmony import */ var _lib_db__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/lib/db */ \"(rsc)/./src/lib/db.js\");\n/* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/auth */ \"(rsc)/./src/lib/auth.js\");\nconst dynamic = \"force-dynamic\";\n\n\n// GET /api/contracts - 获取合同列表(带筛选和分页)\nasync function GET(request) {\n try {\n const user = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.getUserFromRequest)(request);\n if (!user) return (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.unauthorizedResponse)();\n const { searchParams } = new URL(request.url);\n const status = searchParams.get(\"status\");\n const search = searchParams.get(\"search\");\n const date_from = searchParams.get(\"date_from\");\n const date_to = searchParams.get(\"date_to\");\n const department_id = searchParams.get(\"department_id\");\n const page = parseInt(searchParams.get(\"page\") || \"1\", 10);\n const page_size = parseInt(searchParams.get(\"page_size\") || \"10\", 10);\n const db = await (0,_lib_db__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n let whereClauses = [];\n let queryParams = [];\n // 根据角色应用可见性规则\n switch(user.role){\n case \"employee\":\n // 员工只能看到自己创建的合同\n whereClauses.push(\"c.creator_id = ?\");\n queryParams.push(user.id);\n break;\n case \"supervisor\":\n // 主管只能看到本部门的合同\n whereClauses.push(\"c.department_id = ?\");\n queryParams.push(user.department_id);\n break;\n case \"finance\":\n case \"secretary\":\n case \"admin\":\n break;\n }\n // 状态筛选\n if (status && status !== \"all\") {\n whereClauses.push(\"c.status = ?\");\n queryParams.push(status);\n }\n // 搜索筛选(项目名称、合作单位名称)\n if (search && search.trim()) {\n whereClauses.push(\"(c.project_name LIKE ? OR c.partner_name LIKE ?)\");\n const keyword = `%${search.trim()}%`;\n queryParams.push(keyword, keyword);\n }\n // 日期范围筛选\n if (date_from) {\n whereClauses.push(\"c.sign_date >= ?\");\n queryParams.push(date_from);\n }\n if (date_to) {\n whereClauses.push(\"c.sign_date <= ?\");\n queryParams.push(date_to);\n }\n // 部门筛选\n if (department_id) {\n whereClauses.push(\"c.department_id = ?\");\n queryParams.push(department_id);\n }\n const whereSQL = whereClauses.length > 0 ? `WHERE ${whereClauses.join(\" AND \")}` : \"\";\n // 获取总数\n const countRow = db.prepare(`SELECT COUNT(*) as total FROM contracts c ${whereSQL}`).get(...queryParams);\n const total = countRow.total;\n // 获取分页数据\n const offset = (page - 1) * page_size;\n const contracts = db.prepare(`SELECT c.*, p.name as partner_name\r\n FROM contracts c\r\n LEFT JOIN partners p ON c.partner_id = p.id\r\n ${whereSQL}\r\n ORDER BY c.created_at DESC\r\n LIMIT ? OFFSET ?`).all(...queryParams, page_size, offset);\n return Response.json({\n contracts,\n data: contracts,\n total,\n page,\n page_size\n });\n } catch (error) {\n console.error(\"获取合同列表失败:\", error);\n return Response.json({\n error: \"服务器内部错误\"\n }, {\n status: 500\n });\n }\n}\n// POST /api/contracts - 创建合同(仅员工可创建)\nasync function POST(request) {\n try {\n const user = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.getUserFromRequest)(request);\n if (!user) return (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.unauthorizedResponse)();\n if (!(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.checkRole)(user, [\n \"employee\"\n ])) {\n return (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.forbiddenResponse)();\n }\n const body = await request.json();\n const { project_name, partner_id, contract_content, contract_years, contract_amount, estimated_profit, payment_type, sign_date, project_leader } = body;\n if (!project_name || !partner_id) {\n return Response.json({\n error: \"项目名称和合作单位不能为空\"\n }, {\n status: 400\n });\n }\n const db = await (0,_lib_db__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n // 获取用户完整信息(包含部门)\n const fullUser = db.prepare(`SELECT u.*, d.name as department_name \r\n FROM users u \r\n LEFT JOIN departments d ON u.department_id = d.id \r\n WHERE u.id = ?`).get(user.id);\n // 查找合作单位名称\n const partner = db.prepare(\"SELECT name FROM partners WHERE id = ? AND is_deleted = 0\").get(partner_id);\n if (!partner) {\n return Response.json({\n error: \"合作单位不存在\"\n }, {\n status: 400\n });\n }\n const result = db.prepare(`\r\n INSERT INTO contracts (\r\n project_name, partner_id, partner_name, contract_content, contract_years,\r\n contract_amount, estimated_profit, payment_type, sign_date,\r\n creator_id, creator_name, department_id, department_name, project_leader,\r\n status\r\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending_supervisor')\r\n `).run(project_name, partner_id, partner.name, contract_content || null, contract_years || null, contract_amount || 0, estimated_profit !== undefined && estimated_profit !== null ? estimated_profit : null, payment_type || \"receive\", sign_date || null, fullUser.id, fullUser.real_name, fullUser.department_id, fullUser.department_name || null, project_leader || null);\n const contract = db.prepare(\"SELECT * FROM contracts WHERE id = ?\").get(result.lastInsertRowid);\n return Response.json(contract, {\n status: 201\n });\n } catch (error) {\n console.error(\"创建合同失败:\", error);\n return Response.json({\n error: \"服务器内部错误\"\n }, {\n status: 500\n });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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WSxPQUFPLENBQUMsQ0FBQzs7Ozs7OztJQU8zQixDQUFDLEVBQUV3QixHQUFHLENBQ0paLGNBQ0FDLFlBQ0FTLFFBQVFHLElBQUksRUFDWlgsb0JBQW9CLE1BQ3BCQyxrQkFBa0IsTUFDbEJDLG1CQUFtQixHQUNuQkMscUJBQXFCUyxhQUFhVCxxQkFBcUIsT0FBT0EsbUJBQW1CLE1BQ2pGQyxnQkFBZ0IsV0FDaEJDLGFBQWEsTUFDYkUsU0FBUzVCLEVBQUUsRUFDWDRCLFNBQVNNLFNBQVMsRUFDbEJOLFNBQVNyQyxhQUFhLEVBQ3RCcUMsU0FBU08sZUFBZSxJQUFJLE1BQzVCUixrQkFBa0I7UUFHcEIsTUFBTVMsV0FBV3pDLEdBQUdZLE9BQU8sQ0FBQyx3Q0FBd0NwQixHQUFHLENBQUMyQyxPQUFPTyxlQUFlO1FBRTlGLE9BQU96QixTQUFTQyxJQUFJLENBQUN1QixVQUFVO1lBQUVsRCxRQUFRO1FBQUk7SUFDL0MsRUFBRSxPQUFPNkIsT0FBTztRQUNkQyxRQUFRRCxLQUFLLENBQUMsV0FBV0E7UUFDekIsT0FBT0gsU0FBU0MsSUFBSSxDQUNsQjtZQUFFRSxPQUFPO1FBQVUsR0FDbkI7WUFBRTdCLFFBQVE7UUFBSTtJQUVsQjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY29udHJhY3QtYXBwcm92YWwtc3lzdGVtLy4vc3JjL2FwcC9hcGkvY29udHJhY3RzL3JvdXRlLmpzPzQyYTAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGR5bmFtaWMgPSBcImZvcmNlLWR5bmFtaWNcIjtcclxuaW1wb3J0IGdldERiIGZyb20gJ0AvbGliL2RiJztcclxuaW1wb3J0IHsgZ2V0VXNlckZyb21SZXF1ZXN0LCB1bmF1dGhvcml6ZWRSZXNwb25zZSwgZm9yYmlkZGVuUmVzcG9uc2UsIGNoZWNrUm9sZSB9IGZyb20gJ0AvbGliL2F1dGgnO1xyXG5cclxuLy8gR0VUIC9hcGkvY29udHJhY3RzIC0g6I635Y+W5ZCI5ZCM5YiX6KGo77yI5bim562b6YCJ5ZKM5YiG6aG177yJXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBHRVQocmVxdWVzdCkge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCB1c2VyID0gZ2V0VXNlckZyb21SZXF1ZXN0KHJlcXVlc3QpO1xyXG4gICAgaWYgKCF1c2VyKSByZXR1cm4gdW5hdXRob3JpemVkUmVzcG9uc2UoKTtcclxuXHJcbiAgICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XHJcbiAgICBjb25zdCBzdGF0dXMgPSBzZWFyY2hQYXJhbXMuZ2V0KCdzdGF0dXMnKTtcclxuICAgIGNvbnN0IHNlYXJjaCA9IHNlYXJjaFBhcmFtcy5nZXQoJ3NlYXJjaCcpO1xyXG4gICAgY29uc3QgZGF0ZV9mcm9tID0gc2VhcmNoUGFyYW1zLmdldCgnZGF0ZV9mcm9tJyk7XHJcbiAgICBjb25zdCBkYXRlX3RvID0gc2VhcmNoUGFyYW1zLmdldCgnZGF0ZV90bycpO1xyXG4gICAgY29uc3QgZGVwYXJ0bWVudF9pZCA9IHNlYXJjaFBhcmFtcy5nZXQoJ2RlcGFydG1lbnRfaWQnKTtcclxuICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChzZWFyY2hQYXJhbXMuZ2V0KCdwYWdlJykgfHwgJzEnLCAxMCk7XHJcbiAgICBjb25zdCBwYWdlX3NpemUgPSBwYXJzZUludChzZWFyY2hQYXJhbXMuZ2V0KCdwYWdlX3NpemUnKSB8fCAnMTAnLCAxMCk7XHJcblxyXG4gICAgY29uc3QgZGIgPSBhd2FpdCBnZXREYigpO1xyXG5cclxuICAgIGxldCB3aGVyZUNsYXVzZXMgPSBbXTtcclxuICAgIGxldCBxdWVyeVBhcmFtcyA9IFtdO1xyXG5cclxuICAgIC8vIOagueaNruinkuiJsuW6lOeUqOWPr+ingeaAp+inhOWImVxyXG4gICAgc3dpdGNoICh1c2VyLnJvbGUpIHtcclxuICAgICAgY2FzZSAnZW1wbG95ZWUnOlxyXG4gICAgICAgIC8vIOWRmOW3peWPquiDveeci+WIsOiHquW3seWIm+W7uueahOWQiOWQjFxyXG4gICAgICAgIHdoZXJlQ2xhdXNlcy5wdXNoKCdjLmNyZWF0b3JfaWQgPSA/Jyk7XHJcbiAgICAgICAgcXVlcnlQYXJhbXMucHVzaCh1c2VyLmlkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc3VwZXJ2aXNvcic6XHJcbiAgICAgICAgLy8g5Li7566h5Y+q6IO955yL5Yiw5pys6YOo6Zeo55qE5ZCI5ZCMXHJcbiAgICAgICAgd2hlcmVDbGF1c2VzLnB1c2goJ2MuZGVwYXJ0bWVudF9pZCA9ID8nKTtcclxuICAgICAgICBxdWVyeVBhcmFtcy5wdXNoKHVzZXIuZGVwYXJ0bWVudF9pZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2ZpbmFuY2UnOlxyXG4gICAgICBjYXNlICdzZWNyZXRhcnknOlxyXG4gICAgICBjYXNlICdhZG1pbic6XHJcbiAgICAgICAgLy8g6LSi5Yqh44CB56eY5Lmm6ZW/44CB566h55CG5ZGY5Y+v5Lul55yL5Yiw5omA5pyJ5ZCI5ZCMXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g54q25oCB562b6YCJXHJcbiAgICBpZiAoc3RhdHVzICYmIHN0YXR1cyAhPT0gJ2FsbCcpIHtcclxuICAgICAgd2hlcmVDbGF1c2VzLnB1c2goJ2Muc3RhdHVzID0gPycpO1xyXG4gICAgICBxdWVyeVBhcmFtcy5wdXNoKHN0YXR1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5pCc57Si562b6YCJ77yI6aG555uu5ZCN56ew44CB5ZCI5L2c5Y2V5L2N5ZCN56ew77yJXHJcbiAgICBpZiAoc2VhcmNoICYmIHNlYXJjaC50cmltKCkpIHtcclxuICAgICAgd2hlcmVDbGF1c2VzLnB1c2goJyhjLnByb2plY3RfbmFtZSBMSUtFID8gT1IgYy5wYXJ0bmVyX25hbWUgTElLRSA/KScpO1xyXG4gICAgICBjb25zdCBrZXl3b3JkID0gYCUke3NlYXJjaC50cmltKCl9JWA7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goa2V5d29yZCwga2V5d29yZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5pel5pyf6IyD5Zu0562b6YCJXHJcbiAgICBpZiAoZGF0ZV9mcm9tKSB7XHJcbiAgICAgIHdoZXJlQ2xhdXNlcy5wdXNoKCdjLnNpZ25fZGF0ZSA+PSA/Jyk7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goZGF0ZV9mcm9tKTtcclxuICAgIH1cclxuICAgIGlmIChkYXRlX3RvKSB7XHJcbiAgICAgIHdoZXJlQ2xhdXNlcy5wdXNoKCdjLnNpZ25fZGF0ZSA8PSA/Jyk7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goZGF0ZV90byk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6YOo6Zeo562b6YCJXHJcbiAgICBpZiAoZGVwYXJ0bWVudF9pZCkge1xyXG4gICAgICB3aGVyZUNsYXVzZXMucHVzaCgnYy5kZXBhcnRtZW50X2lkID0gPycpO1xyXG4gICAgICBxdWVyeVBhcmFtcy5wdXNoKGRlcGFydG1lbnRfaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHdoZXJlU1FMID0gd2hlcmVDbGF1c2VzLmxlbmd0aCA+IDAgPyBgV0hFUkUgJHt3aGVyZUNsYXVzZXMuam9pbignIEFORCAnKX1gIDogJyc7XHJcblxyXG4gICAgLy8g6I635Y+W5oC75pWwXHJcbiAgICBjb25zdCBjb3VudFJvdyA9IGRiLnByZXBhcmUoXHJcbiAgICAgIGBTRUxFQ1QgQ09VTlQoKikgYXMgdG90YWwgRlJPTSBjb250cmFjdHMgYyAke3doZXJlU1FMfWBcclxuICAgICkuZ2V0KC4uLnF1ZXJ5UGFyYW1zKTtcclxuICAgIGNvbnN0IHRvdGFsID0gY291bnRSb3cudG90YWw7XHJcblxyXG4gICAgLy8g6I635Y+W5YiG6aG15pWw5o2uXHJcbiAgICBjb25zdCBvZmZzZXQgPSAocGFnZSAtIDEpICogcGFnZV9zaXplO1xyXG4gICAgY29uc3QgY29udHJhY3RzID0gZGIucHJlcGFyZShcclxuICAgICAgYFNFTEVDVCBjLiosIHAubmFtZSBhcyBwYXJ0bmVyX25hbWVcclxuICAgICAgIEZST00gY29udHJhY3RzIGNcclxuICAgICAgIExFRlQgSk9JTiBwYXJ0bmVycyBwIE9OIGMucGFydG5lcl9pZCA9IHAuaWRcclxuICAgICAgICR7d2hlcmVTUUx9XHJcbiAgICAgICBPUkRFUiBCWSBjLmNyZWF0ZWRfYXQgREVTQ1xyXG4gICAgICAgTElNSVQgPyBPRkZTRVQgP2BcclxuICAgICkuYWxsKC4uLnF1ZXJ5UGFyYW1zLCBwYWdlX3NpemUsIG9mZnNldCk7XHJcblxyXG4gICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oe1xyXG4gICAgICBjb250cmFjdHMsXHJcbiAgICAgIGRhdGE6IGNvbnRyYWN0cyxcclxuICAgICAgdG90YWwsXHJcbiAgICAgIHBhZ2UsXHJcbiAgICAgIHBhZ2Vfc2l6ZSxcclxuICAgIH0pO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCfojrflj5blkIjlkIzliJfooajlpLHotKU6JywgZXJyb3IpO1xyXG4gICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXHJcbiAgICAgIHsgZXJyb3I6ICfmnI3liqHlmajlhoXpg6jplJnor68nIH0sXHJcbiAgICAgIHsgc3RhdHVzOiA1MDAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIFBPU1QgL2FwaS9jb250cmFjdHMgLSDliJvlu7rlkIjlkIzvvIjku4XlkZjlt6Xlj6/liJvlu7rvvIlcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIFBPU1QocmVxdWVzdCkge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCB1c2VyID0gZ2V0VXNlckZyb21SZXF1ZXN0KHJlcXVlc3QpO1xyXG4gICAgaWYgKCF1c2VyKSByZXR1cm4gdW5hdXRob3JpemVkUmVzcG9uc2UoKTtcclxuICAgIGlmICghY2hlY2tSb2xlKHVzZXIsIFsnZW1wbG95ZWUnXSkpIHtcclxuICAgICAgcmV0dXJuIGZvcmJpZGRlblJlc3BvbnNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlcXVlc3QuanNvbigpO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBwcm9qZWN0X25hbWUsIHBhcnRuZXJfaWQsIGNvbnRyYWN0X2NvbnRlbnQsIGNvbnRyYWN0X3llYXJzLFxyXG4gICAgICBjb250cmFjdF9hbW91bnQsIGVzdGltYXRlZF9wcm9maXQsIHBheW1lbnRfdHlwZSwgc2lnbl9kYXRlLCBwcm9qZWN0X2xlYWRlcixcclxuICAgIH0gPSBib2R5O1xyXG5cclxuICAgIGlmICghcHJvamVjdF9uYW1lIHx8ICFwYXJ0bmVyX2lkKSB7XHJcbiAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKFxyXG4gICAgICAgIHsgZXJyb3I6ICfpobnnm67lkI3np7DlkozlkIjkvZzljZXkvY3kuI3og73kuLrnqbonIH0sXHJcbiAgICAgICAgeyBzdGF0dXM6IDQwMCB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGIgPSBhd2FpdCBnZXREYigpO1xyXG5cclxuICAgIC8vIOiOt+WPlueUqOaIt+WujOaVtOS/oeaBr++8iOWMheWQq+mDqOmXqO+8iVxyXG4gICAgY29uc3QgZnVsbFVzZXIgPSBkYi5wcmVwYXJlKFxyXG4gICAgICBgU0VMRUNUIHUuKiwgZC5uYW1lIGFzIGRlcGFydG1lbnRfbmFtZSBcclxuICAgICAgIEZST00gdXNlcnMgdSBcclxuICAgICAgIExFRlQgSk9JTiBkZXBhcnRtZW50cyBkIE9OIHUuZGVwYXJ0bWVudF9pZCA9IGQuaWQgXHJcbiAgICAgICBXSEVSRSB1LmlkID0gP2BcclxuICAgICkuZ2V0KHVzZXIuaWQpO1xyXG5cclxuICAgIC8vIOafpeaJvuWQiOS9nOWNleS9jeWQjeensFxyXG4gICAgY29uc3QgcGFydG5lciA9IGRiLnByZXBhcmUoJ1NFTEVDVCBuYW1lIEZST00gcGFydG5lcnMgV0hFUkUgaWQgPSA/IEFORCBpc19kZWxldGVkID0gMCcpLmdldChwYXJ0bmVyX2lkKTtcclxuICAgIGlmICghcGFydG5lcikge1xyXG4gICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcclxuICAgICAgICB7IGVycm9yOiAn5ZCI5L2c5Y2V5L2N5LiN5a2Y5ZyoJyB9LFxyXG4gICAgICAgIHsgc3RhdHVzOiA0MDAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGRiLnByZXBhcmUoYFxyXG4gICAgICBJTlNFUlQgSU5UTyBjb250cmFjdHMgKFxyXG4gICAgICAgIHByb2plY3RfbmFtZSwgcGFydG5lcl9pZCwgcGFydG5lcl9uYW1lLCBjb250cmFjdF9jb250ZW50LCBjb250cmFjdF95ZWFycyxcclxuICAgICAgICBjb250cmFjdF9hbW91bnQsIGVzdGltYXRlZF9wcm9maXQsIHBheW1lbnRfdHlwZSwgc2lnbl9kYXRlLFxyXG4gICAgICAgIGNyZWF0b3JfaWQsIGNyZWF0b3JfbmFtZSwgZGVwYXJ0bWVudF9pZCwgZGVwYXJ0bWVudF9uYW1lLCBwcm9qZWN0X2xlYWRlcixcclxuICAgICAgICBzdGF0dXNcclxuICAgICAgKSBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sICdwZW5kaW5nX3N1cGVydmlzb3InKVxyXG4gICAgYCkucnVuKFxyXG4gICAgICBwcm9qZWN0X25hbWUsXHJcbiAgICAgIHBhcnRuZXJfaWQsXHJcbiAgICAgIHBhcnRuZXIubmFtZSxcclxuICAgICAgY29udHJhY3RfY29udGVudCB8fCBudWxsLFxyXG4gICAgICBjb250cmFjdF95ZWFycyB8fCBudWxsLFxyXG4gICAgICBjb250cmFjdF9hbW91bnQgfHwgMCxcclxuICAgICAgZXN0aW1hdGVkX3Byb2ZpdCAhPT0gdW5kZWZpbmVkICYmIGVzdGltYXRlZF9wcm9maXQgIT09IG51bGwgPyBlc3RpbWF0ZWRfcHJvZml0IDogbnVsbCxcclxuICAgICAgcGF5bWVudF90eXBlIHx8ICdyZWNlaXZlJyxcclxuICAgICAgc2lnbl9kYXRlIHx8IG51bGwsXHJcbiAgICAgIGZ1bGxVc2VyLmlkLFxyXG4gICAgICBmdWxsVXNlci5yZWFsX25hbWUsXHJcbiAgICAgIGZ1bGxVc2VyLmRlcGFydG1lbnRfaWQsXHJcbiAgICAgIGZ1bGxVc2VyLmRlcGFydG1lbnRfbmFtZSB8fCBudWxsLFxyXG4gICAgICBwcm9qZWN0X2xlYWRlciB8fCBudWxsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyYWN0ID0gZGIucHJlcGFyZSgnU0VMRUNUICogRlJPTSBjb250cmFjdHMgV0hFUkUgaWQgPSA/JykuZ2V0KHJlc3VsdC5sYXN0SW5zZXJ0Um93aWQpO1xyXG5cclxuICAgIHJldHVybiBSZXNwb25zZS5qc29uKGNvbnRyYWN0LCB7IHN0YXR1czogMjAxIH0pO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCfliJvlu7rlkIjlkIzlpLHotKU6JywgZXJyb3IpO1xyXG4gICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXHJcbiAgICAgIHsgZXJyb3I6ICfmnI3liqHlmajlhoXpg6jplJnor68nIH0sXHJcbiAgICAgIHsgc3RhdHVzOiA1MDAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbImR5bmFtaWMiLCJnZXREYiIsImdldFVzZXJGcm9tUmVxdWVzdCIsInVuYXV0aG9yaXplZFJlc3BvbnNlIiwiZm9yYmlkZGVuUmVzcG9uc2UiLCJjaGVja1JvbGUiLCJHRVQiLCJyZXF1ZXN0IiwidXNlciIsInNlYXJjaFBhcmFtcyIsIlVSTCIsInVybCIsInN0YXR1cyIsImdldCIsInNlYXJjaCIsImRhdGVfZnJvbSIsImRhdGVfdG8iLCJkZXBhcnRtZW50X2lkIiwicGFnZSIsInBhcnNlSW50IiwicGFnZV9zaXplIiwiZGIiLCJ3aGVyZUNsYXVzZXMiLCJxdWVyeVBhcmFtcyIsInJvbGUiLCJwdXNoIiwiaWQiLCJ0cmltIiwia2V5d29yZCIsIndoZXJlU1FMIiwibGVuZ3RoIiwiam9pbiIsImNvdW50Um93IiwicHJlcGFyZSIsInRvdGFsIiwib2Zmc2V0IiwiY29udHJhY3RzIiwiYWxsIiwiUmVzcG9uc2UiLCJqc29uIiwiZGF0YSIsImVycm9yIiwiY29uc29sZSIsIlBPU1QiLCJib2R5IiwicHJvamVjdF9uYW1lIiwicGFydG5lcl9pZCIsImNvbnRyYWN0X2NvbnRlbnQiLCJjb250cmFjdF95ZWFycyIsImNvbnRyYWN0X2Ftb3VudCIsImVzdGltYXRlZF9wcm9maXQiLCJwYXltZW50X3R5cGUiLCJzaWduX2RhdGUiLCJwcm9qZWN0X2xlYWRlciIsImZ1bGxVc2VyIiwicGFydG5lciIsInJlc3VsdCIsInJ1biIsIm5hbWUiLCJ1bmRlZmluZWQiLCJyZWFsX25hbWUiLCJkZXBhcnRtZW50X25hbWUiLCJjb250cmFjdCIsImxhc3RJbnNlcnRSb3dpZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./src/app/api/contracts/route.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(rsc)/./src/lib/auth.js":
|
||
/*!*************************!*\
|
||
!*** ./src/lib/auth.js ***!
|
||
\*************************/
|
||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ checkRole: () => (/* binding */ checkRole),\n/* harmony export */ forbiddenResponse: () => (/* binding */ forbiddenResponse),\n/* harmony export */ generateToken: () => (/* binding */ generateToken),\n/* harmony export */ getUserFromRequest: () => (/* binding */ getUserFromRequest),\n/* harmony export */ unauthorizedResponse: () => (/* binding */ unauthorizedResponse),\n/* harmony export */ verifyToken: () => (/* binding */ verifyToken)\n/* harmony export */ });\n/* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonwebtoken */ \"(rsc)/./node_modules/jsonwebtoken/index.js\");\n/* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__);\n\nconst JWT_SECRET = process.env.JWT_SECRET || \"contract-approval-system-secret-key-2024\";\nconst TOKEN_EXPIRY = \"24h\";\n// 生成 JWT Token\nfunction generateToken(user) {\n return jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default().sign({\n id: user.id,\n username: user.username,\n real_name: user.real_name,\n role: user.role,\n department_id: user.department_id\n }, JWT_SECRET, {\n expiresIn: TOKEN_EXPIRY\n });\n}\n// 验证 JWT Token\nfunction verifyToken(token) {\n try {\n return jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default().verify(token, JWT_SECRET);\n } catch (error) {\n return null;\n }\n}\n// 从请求头获取用户信息\nfunction getUserFromRequest(request) {\n const authHeader = request.headers.get(\"Authorization\");\n if (!authHeader || !authHeader.startsWith(\"Bearer \")) {\n return null;\n }\n const token = authHeader.substring(7);\n return verifyToken(token);\n}\n// 检查是否有权限\nfunction checkRole(user, allowedRoles) {\n if (!user) return false;\n return allowedRoles.includes(user.role);\n}\n// 返回未授权响应\nfunction unauthorizedResponse() {\n return Response.json({\n error: \"未登录或登录已过期\"\n }, {\n status: 401\n });\n}\n// 返回无权限响应 \nfunction forbiddenResponse() {\n return Response.json({\n error: \"无权限访问\"\n }, {\n status: 403\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9zcmMvbGliL2F1dGguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBK0I7QUFFL0IsTUFBTUMsYUFBYUMsUUFBUUMsR0FBRyxDQUFDRixVQUFVLElBQUk7QUFDN0MsTUFBTUcsZUFBZTtBQUVyQixlQUFlO0FBQ1IsU0FBU0MsY0FBY0MsSUFBSTtJQUNoQyxPQUFPTix3REFBUSxDQUNiO1FBQ0VRLElBQUlGLEtBQUtFLEVBQUU7UUFDWEMsVUFBVUgsS0FBS0csUUFBUTtRQUN2QkMsV0FBV0osS0FBS0ksU0FBUztRQUN6QkMsTUFBTUwsS0FBS0ssSUFBSTtRQUNmQyxlQUFlTixLQUFLTSxhQUFhO0lBQ25DLEdBQ0FYLFlBQ0E7UUFBRVksV0FBV1Q7SUFBYTtBQUU5QjtBQUVBLGVBQWU7QUFDUixTQUFTVSxZQUFZQyxLQUFLO0lBQy9CLElBQUk7UUFDRixPQUFPZiwwREFBVSxDQUFDZSxPQUFPZDtJQUMzQixFQUFFLE9BQU9nQixPQUFPO1FBQ2QsT0FBTztJQUNUO0FBQ0Y7QUFFQSxhQUFhO0FBQ04sU0FBU0MsbUJBQW1CQyxPQUFPO0lBQ3hDLE1BQU1DLGFBQWFELFFBQVFFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO0lBQ3ZDLElBQUksQ0FBQ0YsY0FBYyxDQUFDQSxXQUFXRyxVQUFVLENBQUMsWUFBWTtRQUNwRCxPQUFPO0lBQ1Q7SUFDQSxNQUFNUixRQUFRSyxXQUFXSSxTQUFTLENBQUM7SUFDbkMsT0FBT1YsWUFBWUM7QUFDckI7QUFFQSxVQUFVO0FBQ0gsU0FBU1UsVUFBVW5CLElBQUksRUFBRW9CLFlBQVk7SUFDMUMsSUFBSSxDQUFDcEIsTUFBTSxPQUFPO0lBQ2xCLE9BQU9vQixhQUFhQyxRQUFRLENBQUNyQixLQUFLSyxJQUFJO0FBQ3hDO0FBRUEsVUFBVTtBQUNILFNBQVNpQjtJQUNkLE9BQU9DLFNBQVNDLElBQUksQ0FDbEI7UUFBRWIsT0FBTztJQUFZLEdBQ3JCO1FBQUVjLFFBQVE7SUFBSTtBQUVsQjtBQUVBLFlBQVk7QUFDTCxTQUFTQztJQUNkLE9BQU9ILFNBQVNDLElBQUksQ0FDbEI7UUFBRWIsT0FBTztJQUFRLEdBQ2pCO1FBQUVjLFFBQVE7SUFBSTtBQUVsQiIsInNvdXJjZXMiOlsid2VicGFjazovL2NvbnRyYWN0LWFwcHJvdmFsLXN5c3RlbS8uL3NyYy9saWIvYXV0aC5qcz84N2JkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBqd3QgZnJvbSAnanNvbndlYnRva2VuJztcclxuXHJcbmNvbnN0IEpXVF9TRUNSRVQgPSBwcm9jZXNzLmVudi5KV1RfU0VDUkVUIHx8ICdjb250cmFjdC1hcHByb3ZhbC1zeXN0ZW0tc2VjcmV0LWtleS0yMDI0JztcclxuY29uc3QgVE9LRU5fRVhQSVJZID0gJzI0aCc7XHJcblxyXG4vLyDnlJ/miJAgSldUIFRva2VuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVRva2VuKHVzZXIpIHtcclxuICByZXR1cm4gand0LnNpZ24oXHJcbiAgICB7XHJcbiAgICAgIGlkOiB1c2VyLmlkLFxyXG4gICAgICB1c2VybmFtZTogdXNlci51c2VybmFtZSxcclxuICAgICAgcmVhbF9uYW1lOiB1c2VyLnJlYWxfbmFtZSxcclxuICAgICAgcm9sZTogdXNlci5yb2xlLFxyXG4gICAgICBkZXBhcnRtZW50X2lkOiB1c2VyLmRlcGFydG1lbnRfaWQsXHJcbiAgICB9LFxyXG4gICAgSldUX1NFQ1JFVCxcclxuICAgIHsgZXhwaXJlc0luOiBUT0tFTl9FWFBJUlkgfVxyXG4gICk7XHJcbn1cclxuXHJcbi8vIOmqjOivgSBKV1QgVG9rZW5cclxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVRva2VuKHRva2VuKSB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBqd3QudmVyaWZ5KHRva2VuLCBKV1RfU0VDUkVUKTtcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG4vLyDku47or7fmsYLlpLTojrflj5bnlKjmiLfkv6Hmga9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJGcm9tUmVxdWVzdChyZXF1ZXN0KSB7XHJcbiAgY29uc3QgYXV0aEhlYWRlciA9IHJlcXVlc3QuaGVhZGVycy5nZXQoJ0F1dGhvcml6YXRpb24nKTtcclxuICBpZiAoIWF1dGhIZWFkZXIgfHwgIWF1dGhIZWFkZXIuc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgY29uc3QgdG9rZW4gPSBhdXRoSGVhZGVyLnN1YnN0cmluZyg3KTtcclxuICByZXR1cm4gdmVyaWZ5VG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG4vLyDmo4Dmn6XmmK/lkKbmnInmnYPpmZBcclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUm9sZSh1c2VyLCBhbGxvd2VkUm9sZXMpIHtcclxuICBpZiAoIXVzZXIpIHJldHVybiBmYWxzZTtcclxuICByZXR1cm4gYWxsb3dlZFJvbGVzLmluY2x1ZGVzKHVzZXIucm9sZSk7XHJcbn1cclxuXHJcbi8vIOi/lOWbnuacquaOiOadg+WTjeW6lFxyXG5leHBvcnQgZnVuY3Rpb24gdW5hdXRob3JpemVkUmVzcG9uc2UoKSB7XHJcbiAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXHJcbiAgICB7IGVycm9yOiAn5pyq55m75b2V5oiW55m75b2V5bey6L+H5pyfJyB9LFxyXG4gICAgeyBzdGF0dXM6IDQwMSB9XHJcbiAgKTtcclxufVxyXG5cclxuLy8g6L+U5Zue5peg5p2D6ZmQ5ZON5bqUICBcclxuZXhwb3J0IGZ1bmN0aW9uIGZvcmJpZGRlblJlc3BvbnNlKCkge1xyXG4gIHJldHVybiBSZXNwb25zZS5qc29uKFxyXG4gICAgeyBlcnJvcjogJ+aXoOadg+mZkOiuv+mXricgfSxcclxuICAgIHsgc3RhdHVzOiA0MDMgfVxyXG4gICk7XHJcbn1cclxuIl0sIm5hbWVzIjpbImp3dCIsIkpXVF9TRUNSRVQiLCJwcm9jZXNzIiwiZW52IiwiVE9LRU5fRVhQSVJZIiwiZ2VuZXJhdGVUb2tlbiIsInVzZXIiLCJzaWduIiwiaWQiLCJ1c2VybmFtZSIsInJlYWxfbmFtZSIsInJvbGUiLCJkZXBhcnRtZW50X2lkIiwiZXhwaXJlc0luIiwidmVyaWZ5VG9rZW4iLCJ0b2tlbiIsInZlcmlmeSIsImVycm9yIiwiZ2V0VXNlckZyb21SZXF1ZXN0IiwicmVxdWVzdCIsImF1dGhIZWFkZXIiLCJoZWFkZXJzIiwiZ2V0Iiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsImNoZWNrUm9sZSIsImFsbG93ZWRSb2xlcyIsImluY2x1ZGVzIiwidW5hdXRob3JpemVkUmVzcG9uc2UiLCJSZXNwb25zZSIsImpzb24iLCJzdGF0dXMiLCJmb3JiaWRkZW5SZXNwb25zZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./src/lib/auth.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(rsc)/./src/lib/db.js":
|
||
/*!***********************!*\
|
||
!*** ./src/lib/db.js ***!
|
||
\***********************/
|
||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getDb)\n/* harmony export */ });\n/* harmony import */ var sql_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sql.js */ \"sql.js\");\n/* harmony import */ var sql_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sql_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ \"path\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! fs */ \"fs\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var bcryptjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! bcryptjs */ \"(rsc)/./node_modules/bcryptjs/index.js\");\n/* harmony import */ var bcryptjs__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(bcryptjs__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nconst DB_PATH = path__WEBPACK_IMPORTED_MODULE_1___default().join(process.cwd(), \"data\", \"database.sqlite\");\nlet db = null;\nlet SQL = null;\nlet initPromise = null;\nlet transactionDepth = 0;\nfunction saveDb() {\n if (transactionDepth > 0) {\n return;\n }\n if (db) {\n const data = db.export();\n const buffer = Buffer.from(data);\n const dir = path__WEBPACK_IMPORTED_MODULE_1___default().dirname(DB_PATH);\n if (!fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(dir)) {\n fs__WEBPACK_IMPORTED_MODULE_2___default().mkdirSync(dir, {\n recursive: true\n });\n }\n fs__WEBPACK_IMPORTED_MODULE_2___default().writeFileSync(DB_PATH, buffer);\n }\n}\nasync function ensureInit() {\n if (db) return;\n if (initPromise) {\n await initPromise;\n return;\n }\n initPromise = (async ()=>{\n SQL = await sql_js__WEBPACK_IMPORTED_MODULE_0___default()();\n const dir = path__WEBPACK_IMPORTED_MODULE_1___default().dirname(DB_PATH);\n if (!fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(dir)) {\n fs__WEBPACK_IMPORTED_MODULE_2___default().mkdirSync(dir, {\n recursive: true\n });\n }\n try {\n if (fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(DB_PATH)) {\n const fileBuffer = fs__WEBPACK_IMPORTED_MODULE_2___default().readFileSync(DB_PATH);\n db = new SQL.Database(fileBuffer);\n } else {\n db = new SQL.Database();\n }\n } catch {\n db = new SQL.Database();\n }\n initializeDatabase(db);\n saveDb();\n })();\n await initPromise;\n}\n// 异步获取 db 代理 - 所有 API 路由使用这个\nasync function getDb() {\n await ensureInit();\n return {\n prepare (sql) {\n return {\n get (...params) {\n const stmt = db.prepare(sql);\n if (params.length > 0) stmt.bind(params);\n if (stmt.step()) {\n const result = stmt.getAsObject();\n stmt.free();\n return result;\n }\n stmt.free();\n return undefined;\n },\n all (...params) {\n const results = [];\n const stmt = db.prepare(sql);\n if (params.length > 0) stmt.bind(params);\n while(stmt.step()){\n results.push(stmt.getAsObject());\n }\n stmt.free();\n return results;\n },\n run (...params) {\n db.run(sql, params);\n const lastId = db.exec(\"SELECT last_insert_rowid() as id\");\n const changes = db.getRowsModified();\n saveDb();\n return {\n lastInsertRowid: lastId[0]?.values[0]?.[0] || 0,\n changes\n };\n }\n };\n },\n exec (sql) {\n db.exec(sql);\n saveDb();\n },\n transaction (fn) {\n return (...args)=>{\n transactionDepth++;\n db.run(\"BEGIN TRANSACTION\");\n try {\n const result = fn(...args);\n transactionDepth--;\n db.run(\"COMMIT\");\n saveDb();\n return result;\n } catch (error) {\n transactionDepth--;\n console.error(\"TRANSACTION ERROR:\", error);\n try {\n db.run(\"ROLLBACK\");\n } catch (rollbackError) {\n console.error(\"ROLLBACK ERROR:\", rollbackError);\n }\n throw error;\n }\n };\n }\n };\n}\nfunction initializeDatabase(database) {\n database.run(`CREATE TABLE IF NOT EXISTS departments (\r\n id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE,\r\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP)`);\n database.run(`CREATE TABLE IF NOT EXISTS users (\r\n id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE,\r\n password TEXT NOT NULL, real_name TEXT NOT NULL,\r\n role TEXT NOT NULL DEFAULT 'employee', department_id INTEGER,\r\n status INTEGER DEFAULT 1, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\r\n FOREIGN KEY (department_id) REFERENCES departments(id))`);\n database.run(`CREATE TABLE IF NOT EXISTS partners (\r\n id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL,\r\n short_name TEXT, english_name TEXT, website TEXT, logo TEXT,\r\n address TEXT, description TEXT, is_deleted INTEGER DEFAULT 0,\r\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP)`);\n database.run(`CREATE TABLE IF NOT EXISTS contracts (\r\n id INTEGER PRIMARY KEY AUTOINCREMENT, project_name TEXT NOT NULL,\r\n partner_id INTEGER, partner_name TEXT NOT NULL, contract_content TEXT,\r\n contract_years INTEGER, contract_amount REAL DEFAULT 0,\r\n estimated_profit REAL DEFAULT 0, payment_type TEXT DEFAULT 'receive',\r\n sign_date TEXT, status TEXT DEFAULT 'pending_supervisor',\r\n creator_id INTEGER NOT NULL, creator_name TEXT NOT NULL,\r\n department_id INTEGER, department_name TEXT, project_leader TEXT,\r\n supervisor_opinion TEXT, supervisor_approved INTEGER,\r\n supervisor_id INTEGER, supervisor_name TEXT, supervisor_time DATETIME,\r\n finance_opinion TEXT, finance_approved INTEGER,\r\n finance_id INTEGER, finance_name TEXT, finance_time DATETIME,\r\n secretary_opinion TEXT, secretary_approved INTEGER,\r\n secretary_id INTEGER, secretary_name TEXT, secretary_time DATETIME,\r\n reject_reason TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\r\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\r\n FOREIGN KEY (creator_id) REFERENCES users(id),\r\n FOREIGN KEY (partner_id) REFERENCES partners(id),\r\n FOREIGN KEY (department_id) REFERENCES departments(id))`);\n database.run(`CREATE TABLE IF NOT EXISTS contract_attachments (\r\n id INTEGER PRIMARY KEY AUTOINCREMENT, contract_id INTEGER NOT NULL,\r\n file_name TEXT NOT NULL, file_path TEXT NOT NULL,\r\n file_size INTEGER DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\r\n FOREIGN KEY (contract_id) REFERENCES contracts(id))`);\n database.run(`CREATE TABLE IF NOT EXISTS system_config (\r\n id INTEGER PRIMARY KEY AUTOINCREMENT, config_key TEXT NOT NULL UNIQUE,\r\n config_value TEXT, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP)`);\n database.run(`CREATE TABLE IF NOT EXISTS role_permissions (\r\n id INTEGER PRIMARY KEY AUTOINCREMENT, role TEXT NOT NULL,\r\n menu_key TEXT NOT NULL, visible INTEGER DEFAULT 1,\r\n UNIQUE(role, menu_key))`);\n initDefaultData(database);\n}\nfunction initDefaultData(database) {\n const dc = database.exec(\"SELECT COUNT(*) FROM departments\");\n if ((dc[0]?.values[0]?.[0] || 0) === 0) {\n for (const n of [\n \"技术部\",\n \"市场部\",\n \"销售部\",\n \"财务部\",\n \"行政部\"\n ]){\n database.run(\"INSERT INTO departments (name) VALUES (?)\", [\n n\n ]);\n }\n }\n const uc = database.exec(\"SELECT COUNT(*) FROM users\");\n if ((uc[0]?.values[0]?.[0] || 0) === 0) {\n const s = bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().genSaltSync(10);\n const users = [\n [\n \"admin\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"admin123\", s),\n \"系统管理员\",\n \"admin\",\n null\n ],\n [\n \"zhangsan\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"张三\",\n \"employee\",\n 1\n ],\n [\n \"lisi\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"李四\",\n \"supervisor\",\n 1\n ],\n [\n \"wangwu_emp\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"王五\",\n \"employee\",\n 2\n ],\n [\n \"maqi\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"马七\",\n \"supervisor\",\n 2\n ],\n [\n \"wangwu\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"赵六\",\n \"finance\",\n 4\n ],\n [\n \"qianba\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"钱八\",\n \"secretary\",\n null\n ]\n ];\n for (const u of users){\n database.run(\"INSERT INTO users (username, password, real_name, role, department_id) VALUES (?,?,?,?,?)\", u);\n }\n }\n const cc = database.exec(\"SELECT COUNT(*) FROM system_config\");\n if ((cc[0]?.values[0]?.[0] || 0) === 0) {\n database.run(\"INSERT INTO system_config (config_key, config_value) VALUES ('company_name','合同流转审批系统')\");\n database.run(\"INSERT INTO system_config (config_key, config_value) VALUES ('company_logo','')\");\n database.run(\"INSERT INTO system_config (config_key, config_value) VALUES ('profit_percentage','10')\");\n }\n const pc = database.exec(\"SELECT COUNT(*) FROM role_permissions\");\n if ((pc[0]?.values[0]?.[0] || 0) === 0) {\n const menus = [\n \"dashboard\",\n \"contracts\",\n \"partners\",\n \"users\",\n \"departments\",\n \"settings\",\n \"permissions\"\n ];\n const roles = {\n admin: menus,\n employee: [\n \"dashboard\",\n \"contracts\",\n \"partners\"\n ],\n supervisor: [\n \"dashboard\",\n \"contracts\",\n \"partners\"\n ],\n finance: [\n \"dashboard\",\n \"contracts\",\n \"partners\"\n ],\n secretary: [\n \"dashboard\",\n \"contracts\",\n \"partners\"\n ]\n };\n for (const [role, vm] of Object.entries(roles)){\n for (const m of menus){\n database.run(\"INSERT INTO role_permissions (role, menu_key, visible) VALUES (?,?,?)\", [\n role,\n m,\n vm.includes(m) ? 1 : 0\n ]);\n }\n }\n }\n const pac = database.exec(\"SELECT COUNT(*) FROM partners\");\n if ((pac[0]?.values[0]?.[0] || 0) === 0) {\n const defaultPartners = [\n [\n \"健帆生物科技集团股份有限公司\",\n \"健帆生物\",\n \"Jafron Biomedical Co., Ltd.\",\n \"http://www.jafron.com\",\n \"\",\n \"珠海市唐家湾科技创新海岸科技一路9号\",\n \"血液净化产品的研发、生产与销售\"\n ],\n [\n \"天士力医药集团股份有限公司\",\n \"天士力\",\n \"Tasly Pharmaceutical Group Co., Ltd.\",\n \"http://www.tasly.com\",\n \"\",\n \"天津市北辰科技园区科技东路1号\",\n \"现代中药、化学药、生物药的研发、生产与销售\"\n ],\n [\n \"雅培贸易(上海)有限公司\",\n \"雅培\",\n \"Abbott Laboratories Trading (Shanghai) Co., Ltd.\",\n \"http://www.abbott.com.cn\",\n \"\",\n \"中国(上海)自由贸易试验区外高桥保税区富特北路399号\",\n \"医疗健康、诊断、营养品及成熟药品\"\n ],\n [\n \"成都嗖嗖优速网络科技有限公司\",\n \"嗖嗖优速\",\n \"Chengdu Sousou Yousu Network Technology Co., Ltd.\",\n \"http://www.sousouyousu.com\",\n \"\",\n \"四川省成都市高新区吉泰五路88号\",\n \"互联网信息服务与网络技术研发\"\n ],\n [\n \"成都世纪城会展集团有限公司\",\n \"成都世纪城会展\",\n \"Chengdu Century City Exhibition Group Co., Ltd.\",\n \"http://www.centurycityexhibition.com\",\n \"\",\n \"四川省成都市高新区天府大道中段177号\",\n \"会展场馆运营、会议展览策划与执行\"\n ],\n [\n \"正大天晴药业集团股份有限公司\",\n \"正大天晴\",\n \"Chia Tai-Tianqing Pharmaceutical Group Co., Ltd.\",\n \"http://www.cttq.com\",\n \"\",\n \"江苏省连云港市新浦区巨龙北路16号\",\n \"抗肿瘤、肝病及呼吸系统药物研发与生产\"\n ],\n [\n \"国家卫生健康委能力建设和继续教育中心\",\n \"卫健委能建中心\",\n \"NCCHD, NHC\",\n \"http://www.ncchd.org.cn\",\n \"\",\n \"北京市海淀区学院路38号\",\n \"卫生健康行业人才队伍能力建设与继续医学教育\"\n ],\n [\n \"南京正大天晴制药有限公司\",\n \"南京正大天晴\",\n \"Nanjing Chia Tai-Tianqing Pharmaceutical Co., Ltd.\",\n \"http://www.njcttq.com\",\n \"\",\n \"江苏省南京市经济技术开发区恒广路36号\",\n \"心脑血管、外科及消化系统药物制造\"\n ],\n [\n \"西安盛博商务会展服务有限公司\",\n \"西安盛博会展\",\n \"Xi'an Shengbo Business Exhibition Service Co., Ltd.\",\n \"http://www.xashengbo.com\",\n \"\",\n \"陕西省西安市雁塔区朱雀大街南段2号\",\n \"会议展览服务与公关策划业务\"\n ]\n ];\n for (const p of defaultPartners){\n database.run(\"INSERT INTO partners (name, short_name, english_name, website, logo, address, description) VALUES (?,?,?,?,?,?,?)\", p);\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O2dCQUFDO2dCQUFrQjtnQkFBUTtnQkFBcUQ7Z0JBQThCO2dCQUFJO2dCQUFvQjthQUFpQjtZQUN2SjtnQkFBQztnQkFBaUI7Z0JBQVc7Z0JBQW1EO2dCQUF3QztnQkFBSTtnQkFBdUI7YUFBbUI7WUFDdEs7Z0JBQUM7Z0JBQWtCO2dCQUFRO2dCQUFvRDtnQkFBdUI7Z0JBQUk7Z0JBQXFCO2FBQXFCO1lBQ3BKO2dCQUFDO2dCQUFzQjtnQkFBVztnQkFBYztnQkFBMkI7Z0JBQUk7Z0JBQWdCO2FBQXdCO1lBQ3ZIO2dCQUFDO2dCQUFnQjtnQkFBVTtnQkFBc0Q7Z0JBQXlCO2dCQUFJO2dCQUF1QjthQUFtQjtZQUN4SjtnQkFBQztnQkFBa0I7Z0JBQVU7Z0JBQXdEO2dCQUE0QjtnQkFBSTtnQkFBcUI7YUFBZ0I7U0FDM0o7UUFDRCxLQUFLLE1BQU1DLEtBQUtELGdCQUFpQjtZQUMvQjFCLFNBQVNiLEdBQUcsQ0FBQyxxSEFBcUh3QztRQUNwSTtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb250cmFjdC1hcHByb3ZhbC1zeXN0ZW0vLi9zcmMvbGliL2RiLmpzPzdmOWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaXRTcWxKcyBmcm9tICdzcWwuanMnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IGJjcnlwdCBmcm9tICdiY3J5cHRqcyc7XHJcblxyXG5jb25zdCBEQl9QQVRIID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdkYXRhJywgJ2RhdGFiYXNlLnNxbGl0ZScpO1xyXG5cclxubGV0IGRiID0gbnVsbDtcclxubGV0IFNRTCA9IG51bGw7XHJcbmxldCBpbml0UHJvbWlzZSA9IG51bGw7XHJcbmxldCB0cmFuc2FjdGlvbkRlcHRoID0gMDtcclxuXHJcbmZ1bmN0aW9uIHNhdmVEYigpIHtcclxuICBpZiAodHJhbnNhY3Rpb25EZXB0aCA+IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgaWYgKGRiKSB7XHJcbiAgICBjb25zdCBkYXRhID0gZGIuZXhwb3J0KCk7XHJcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhKTtcclxuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShEQl9QQVRIKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XHJcbiAgICAgIGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gICAgZnMud3JpdGVGaWxlU3luYyhEQl9QQVRILCBidWZmZXIpO1xyXG4gIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlSW5pdCgpIHtcclxuICBpZiAoZGIpIHJldHVybjtcclxuICBpZiAoaW5pdFByb21pc2UpIHtcclxuICAgIGF3YWl0IGluaXRQcm9taXNlO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBpbml0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XHJcbiAgICBTUUwgPSBhd2FpdCBpbml0U3FsSnMoKTtcclxuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShEQl9QQVRIKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XHJcbiAgICAgIGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoREJfUEFUSCkpIHtcclxuICAgICAgICBjb25zdCBmaWxlQnVmZmVyID0gZnMucmVhZEZpbGVTeW5jKERCX1BBVEgpO1xyXG4gICAgICAgIGRiID0gbmV3IFNRTC5EYXRhYmFzZShmaWxlQnVmZmVyKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYiA9IG5ldyBTUUwuRGF0YWJhc2UoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIGRiID0gbmV3IFNRTC5EYXRhYmFzZSgpO1xyXG4gICAgfVxyXG4gICAgaW5pdGlhbGl6ZURhdGFiYXNlKGRiKTtcclxuICAgIHNhdmVEYigpO1xyXG4gIH0pKCk7XHJcbiAgYXdhaXQgaW5pdFByb21pc2U7XHJcbn1cclxuXHJcbi8vIOW8guatpeiOt+WPliBkYiDku6PnkIYgLSDmiYDmnIkgQVBJIOi3r+eUseS9v+eUqOi/meS4qlxyXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBnZXREYigpIHtcclxuICBhd2FpdCBlbnN1cmVJbml0KCk7XHJcbiAgcmV0dXJuIHtcclxuICAgIHByZXBhcmUoc3FsKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZ2V0KC4uLnBhcmFtcykge1xyXG4gICAgICAgICAgY29uc3Qgc3RtdCA9IGRiLnByZXBhcmUoc3FsKTtcclxuICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMCkgc3RtdC5iaW5kKHBhcmFtcyk7XHJcbiAgICAgICAgICBpZiAoc3RtdC5zdGVwKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RtdC5nZXRBc09iamVjdCgpO1xyXG4gICAgICAgICAgICBzdG10LmZyZWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHN0bXQuZnJlZSgpO1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFsbCguLi5wYXJhbXMpIHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgIGNvbnN0IHN0bXQgPSBkYi5wcmVwYXJlKHNxbCk7XHJcbiAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDApIHN0bXQuYmluZChwYXJhbXMpO1xyXG4gICAgICAgICAgd2hpbGUgKHN0bXQuc3RlcCgpKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChzdG10LmdldEFzT2JqZWN0KCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc3RtdC5mcmVlKCk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJ1biguLi5wYXJhbXMpIHtcclxuICAgICAgICAgIGRiLnJ1bihzcWwsIHBhcmFtcyk7XHJcbiAgICAgICAgICBjb25zdCBsYXN0SWQgPSBkYi5leGVjKCdTRUxFQ1QgbGFzdF9pbnNlcnRfcm93aWQoKSBhcyBpZCcpO1xyXG4gICAgICAgICAgY29uc3QgY2hhbmdlcyA9IGRiLmdldFJvd3NNb2RpZmllZCgpO1xyXG4gICAgICAgICAgc2F2ZURiKCk7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsYXN0SW5zZXJ0Um93aWQ6IGxhc3RJZFswXT8udmFsdWVzWzBdPy5bMF0gfHwgMCxcclxuICAgICAgICAgICAgY2hhbmdlc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgZXhlYyhzcWwpIHtcclxuICAgICAgZGIuZXhlYyhzcWwpO1xyXG4gICAgICBzYXZlRGIoKTtcclxuICAgIH0sXHJcbiAgICB0cmFuc2FjdGlvbihmbikge1xyXG4gICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICB0cmFuc2FjdGlvbkRlcHRoKys7XHJcbiAgICAgICAgZGIucnVuKCdCRUdJTiBUUkFOU0FDVElPTicpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgIHRyYW5zYWN0aW9uRGVwdGgtLTtcclxuICAgICAgICAgIGRiLnJ1bignQ09NTUlUJyk7XHJcbiAgICAgICAgICBzYXZlRGIoKTtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIHRyYW5zYWN0aW9uRGVwdGgtLTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUUkFOU0FDVElPTiBFUlJPUjpcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGIucnVuKCdST0xMQkFDSycpO1xyXG4gICAgICAgICAgfSBjYXRjaCAocm9sbGJhY2tFcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUk9MTEJBQ0sgRVJST1I6XCIsIHJvbGxiYWNrRXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRpYWxpemVEYXRhYmFzZShkYXRhYmFzZSkge1xyXG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgZGVwYXJ0bWVudHMgKFxyXG4gICAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBuYW1lIFRFWFQgTk9UIE5VTEwgVU5JUVVFLFxyXG4gICAgY3JlYXRlZF9hdCBEQVRFVElNRSBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QKWApO1xyXG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdXNlcnMgKFxyXG4gICAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCB1c2VybmFtZSBURVhUIE5PVCBOVUxMIFVOSVFVRSxcclxuICAgIHBhc3N3b3JkIFRFWFQgTk9UIE5VTEwsIHJlYWxfbmFtZSBURVhUIE5PVCBOVUxMLFxyXG4gICAgcm9sZSBURVhUIE5PVCBOVUxMIERFRkFVTFQgJ2VtcGxveWVlJywgZGVwYXJ0bWVudF9pZCBJTlRFR0VSLFxyXG4gICAgc3RhdHVzIElOVEVHRVIgREVGQVVMVCAxLCBjcmVhdGVkX2F0IERBVEVUSU1FIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsXHJcbiAgICBGT1JFSUdOIEtFWSAoZGVwYXJ0bWVudF9pZCkgUkVGRVJFTkNFUyBkZXBhcnRtZW50cyhpZCkpYCk7XHJcbiAgZGF0YWJhc2UucnVuKGBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBwYXJ0bmVycyAoXHJcbiAgICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIG5hbWUgVEVYVCBOT1QgTlVMTCxcclxuICAgIHNob3J0X25hbWUgVEVYVCwgZW5nbGlzaF9uYW1lIFRFWFQsIHdlYnNpdGUgVEVYVCwgbG9nbyBURVhULFxyXG4gICAgYWRkcmVzcyBURVhULCBkZXNjcmlwdGlvbiBURVhULCBpc19kZWxldGVkIElOVEVHRVIgREVGQVVMVCAwLFxyXG4gICAgY3JlYXRlZF9hdCBEQVRFVElNRSBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QKWApO1xyXG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY29udHJhY3RzIChcclxuICAgIGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgcHJvamVjdF9uYW1lIFRFWFQgTk9UIE5VTEwsXHJcbiAgICBwYXJ0bmVyX2lkIElOVEVHRVIsIHBhcnRuZXJfbmFtZSBURVhUIE5PVCBOVUxMLCBjb250cmFjdF9jb250ZW50IFRFWFQsXHJcbiAgICBjb250cmFjdF95ZWFycyBJTlRFR0VSLCBjb250cmFjdF9hbW91bnQgUkVBTCBERUZBVUxUIDAsXHJcbiAgICBlc3RpbWF0ZWRfcHJvZml0IFJFQUwgREVGQVVMVCAwLCBwYXltZW50X3R5cGUgVEVYVCBERUZBVUxUICdyZWNlaXZlJyxcclxuICAgIHNpZ25fZGF0ZSBURVhULCBzdGF0dXMgVEVYVCBERUZBVUxUICdwZW5kaW5nX3N1cGVydmlzb3InLFxyXG4gICAgY3JlYXRvcl9pZCBJTlRFR0VSIE5PVCBOVUxMLCBjcmVhdG9yX25hbWUgVEVYVCBOT1QgTlVMTCxcclxuICAgIGRlcGFydG1lbnRfaWQgSU5URUdFUiwgZGVwYXJ0bWVudF9uYW1lIFRFWFQsIHByb2plY3RfbGVhZGVyIFRFWFQsXHJcbiAgICBzdXBlcnZpc29yX29waW5pb24gVEVYVCwgc3VwZXJ2aXNvcl9hcHByb3ZlZCBJTlRFR0VSLFxyXG4gICAgc3VwZXJ2aXNvcl9pZCBJTlRFR0VSLCBzdXBlcnZpc29yX25hbWUgVEVYVCwgc3VwZXJ2aXNvcl90aW1lIERBVEVUSU1FLFxyXG4gICAgZmluYW5jZV9vcGluaW9uIFRFWFQsIGZpbmFuY2VfYXBwcm92ZWQgSU5URUdFUixcclxuICAgIGZpbmFuY2VfaWQgSU5URUdFUiwgZmluYW5jZV9uYW1lIFRFWFQsIGZpbmFuY2VfdGltZSBEQVRFVElNRSxcclxuICAgIHNlY3JldGFyeV9vcGluaW9uIFRFWFQsIHNlY3JldGFyeV9hcHByb3ZlZCBJTlRFR0VSLFxyXG4gICAgc2VjcmV0YXJ5X2lkIElOVEVHRVIsIHNlY3JldGFyeV9uYW1lIFRFWFQsIHNlY3JldGFyeV90aW1lIERBVEVUSU1FLFxyXG4gICAgcmVqZWN0X3JlYXNvbiBURVhULCBjcmVhdGVkX2F0IERBVEVUSU1FIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsXHJcbiAgICB1cGRhdGVkX2F0IERBVEVUSU1FIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsXHJcbiAgICBGT1JFSUdOIEtFWSAoY3JlYXRvcl9pZCkgUkVGRVJFTkNFUyB1c2VycyhpZCksXHJcbiAgICBGT1JFSUdOIEtFWSAocGFydG5lcl9pZCkgUkVGRVJFTkNFUyBwYXJ0bmVycyhpZCksXHJcbiAgICBGT1JFSUdOIEtFWSAoZGVwYXJ0bWVudF9pZCkgUkVGRVJFTkNFUyBkZXBhcnRtZW50cyhpZCkpYCk7XHJcbiAgZGF0YWJhc2UucnVuKGBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBjb250cmFjdF9hdHRhY2htZW50cyAoXHJcbiAgICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGNvbnRyYWN0X2lkIElOVEVHRVIgTk9UIE5VTEwsXHJcbiAgICBmaWxlX25hbWUgVEVYVCBOT1QgTlVMTCwgZmlsZV9wYXRoIFRFWFQgTk9UIE5VTEwsXHJcbiAgICBmaWxlX3NpemUgSU5URUdFUiBERUZBVUxUIDAsIGNyZWF0ZWRfYXQgREFURVRJTUUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCxcclxuICAgIEZPUkVJR04gS0VZIChjb250cmFjdF9pZCkgUkVGRVJFTkNFUyBjb250cmFjdHMoaWQpKWApO1xyXG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgc3lzdGVtX2NvbmZpZyAoXHJcbiAgICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGNvbmZpZ19rZXkgVEVYVCBOT1QgTlVMTCBVTklRVUUsXHJcbiAgICBjb25maWdfdmFsdWUgVEVYVCwgdXBkYXRlZF9hdCBEQVRFVElNRSBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QKWApO1xyXG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcm9sZV9wZXJtaXNzaW9ucyAoXHJcbiAgICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIHJvbGUgVEVYVCBOT1QgTlVMTCxcclxuICAgIG1lbnVfa2V5IFRFWFQgTk9UIE5VTEwsIHZpc2libGUgSU5URUdFUiBERUZBVUxUIDEsXHJcbiAgICBVTklRVUUocm9sZSwgbWVudV9rZXkpKWApO1xyXG4gIGluaXREZWZhdWx0RGF0YShkYXRhYmFzZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXREZWZhdWx0RGF0YShkYXRhYmFzZSkge1xyXG4gIGNvbnN0IGRjID0gZGF0YWJhc2UuZXhlYygnU0VMRUNUIENPVU5UKCopIEZST00gZGVwYXJ0bWVudHMnKTtcclxuICBpZiAoKGRjWzBdPy52YWx1ZXNbMF0/LlswXSB8fCAwKSA9PT0gMCkge1xyXG4gICAgZm9yIChjb25zdCBuIG9mIFsn5oqA5pyv6YOoJywgJ+W4guWcuumDqCcsICfplIDllK7pg6gnLCAn6LSi5Yqh6YOoJywgJ+ihjOaUv+mDqCddKSB7XHJcbiAgICAgIGRhdGFiYXNlLnJ1bignSU5TRVJUIElOVE8gZGVwYXJ0bWVudHMgKG5hbWUpIFZBTFVFUyAoPyknLCBbbl0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdCB1YyA9IGRhdGFiYXNlLmV4ZWMoJ1NFTEVDVCBDT1VOVCgqKSBGUk9NIHVzZXJzJyk7XHJcbiAgaWYgKCh1Y1swXT8udmFsdWVzWzBdPy5bMF0gfHwgMCkgPT09IDApIHtcclxuICAgIGNvbnN0IHMgPSBiY3J5cHQuZ2VuU2FsdFN5bmMoMTApO1xyXG4gICAgY29uc3QgdXNlcnMgPSBbXHJcbiAgICAgIFsnYWRtaW4nLCBiY3J5cHQuaGFzaFN5bmMoJ2FkbWluMTIzJywgcyksICfns7vnu5/nrqHnkIblkZgnLCAnYWRtaW4nLCBudWxsXSxcclxuICAgICAgWyd6aGFuZ3NhbicsIGJjcnlwdC5oYXNoU3luYygnMTIzNDU2JywgcyksICflvKDkuIknLCAnZW1wbG95ZWUnLCAxXSxcclxuICAgICAgWydsaXNpJywgYmNyeXB0Lmhhc2hTeW5jKCcxMjM0NTYnLCBzKSwgJ+adjuWbmycsICdzdXBlcnZpc29yJywgMV0sXHJcbiAgICAgIFsnd2FuZ3d1X2VtcCcsIGJjcnlwdC5oYXNoU3luYygnMTIzNDU2JywgcyksICfnjovkupQnLCAnZW1wbG95ZWUnLCAyXSxcclxuICAgICAgWydtYXFpJywgYmNyeXB0Lmhhc2hTeW5jKCcxMjM0NTYnLCBzKSwgJ+mprOS4gycsICdzdXBlcnZpc29yJywgMl0sXHJcbiAgICAgIFsnd2FuZ3d1JywgYmNyeXB0Lmhhc2hTeW5jKCcxMjM0NTYnLCBzKSwgJ+i1teWFrScsICdmaW5hbmNlJywgNF0sXHJcbiAgICAgIFsncWlhbmJhJywgYmNyeXB0Lmhhc2hTeW5jKCcxMjM0NTYnLCBzKSwgJ+mSseWFqycsICdzZWNyZXRhcnknLCBudWxsXSxcclxuICAgIF07XHJcbiAgICBmb3IgKGNvbnN0IHUgb2YgdXNlcnMpIHtcclxuICAgICAgZGF0YWJhc2UucnVuKCdJTlNFUlQgSU5UTyB1c2VycyAodXNlcm5hbWUsIHBhc3N3b3JkLCByZWFsX25hbWUsIHJvbGUsIGRlcGFydG1lbnRfaWQpIFZBTFVFUyAoPyw/LD8sPyw/KScsIHUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdCBjYyA9IGRhdGFiYXNlLmV4ZWMoJ1NFTEVDVCBDT1VOVCgqKSBGUk9NIHN5c3RlbV9jb25maWcnKTtcclxuICBpZiAoKGNjWzBdPy52YWx1ZXNbMF0/LlswXSB8fCAwKSA9PT0gMCkge1xyXG4gICAgZGF0YWJhc2UucnVuKFwiSU5TRVJUIElOVE8gc3lzdGVtX2NvbmZpZyAoY29uZmlnX2tleSwgY29uZmlnX3ZhbHVlKSBWQUxVRVMgKCdjb21wYW55X25hbWUnLCflkIjlkIzmtYHovazlrqHmibnns7vnu58nKVwiKTtcclxuICAgIGRhdGFiYXNlLnJ1bihcIklOU0VSVCBJTlRPIHN5c3RlbV9jb25maWcgKGNvbmZpZ19rZXksIGNvbmZpZ192YWx1ZSkgVkFMVUVTICgnY29tcGFueV9sb2dvJywnJylcIik7XHJcbiAgICBkYXRhYmFzZS5ydW4oXCJJTlNFUlQgSU5UTyBzeXN0ZW1fY29uZmlnIChjb25maWdfa2V5LCBjb25maWdfdmFsdWUpIFZBTFVFUyAoJ3Byb2ZpdF9wZXJjZW50YWdlJywnMTAnKVwiKTtcclxuICB9XHJcbiAgY29uc3QgcGMgPSBkYXRhYmFzZS5leGVjKCdTRUxFQ1QgQ09VTlQoKikgRlJPTSByb2xlX3Blcm1pc3Npb25zJyk7XHJcbiAgaWYgKChwY1swXT8udmFsdWVzWzBdPy5bMF0gfHwgMCkgPT09IDApIHtcclxuICAgIGNvbnN0IG1lbnVzID0gWydkYXNoYm9hcmQnLCdjb250cmFjdHMnLCdwYXJ0bmVycycsJ3VzZXJzJywnZGVwYXJ0bWVudHMnLCdzZXR0aW5ncycsJ3Blcm1pc3Npb25zJ107XHJcbiAgICBjb25zdCByb2xlcyA9IHsgYWRtaW46IG1lbnVzLCBlbXBsb3llZTogWydkYXNoYm9hcmQnLCdjb250cmFjdHMnLCdwYXJ0bmVycyddLFxyXG4gICAgICBzdXBlcnZpc29yOiBbJ2Rhc2hib2FyZCcsJ2NvbnRyYWN0cycsJ3BhcnRuZXJzJ10sIGZpbmFuY2U6IFsnZGFzaGJvYXJkJywnY29udHJhY3RzJywncGFydG5lcnMnXSxcclxuICAgICAgc2VjcmV0YXJ5OiBbJ2Rhc2hib2FyZCcsJ2NvbnRyYWN0cycsJ3BhcnRuZXJzJ10gfTtcclxuICAgIGZvciAoY29uc3QgW3JvbGUsIHZtXSBvZiBPYmplY3QuZW50cmllcyhyb2xlcykpIHtcclxuICAgICAgZm9yIChjb25zdCBtIG9mIG1lbnVzKSB7XHJcbiAgICAgICAgZGF0YWJhc2UucnVuKCdJTlNFUlQgSU5UTyByb2xlX3Blcm1pc3Npb25zIChyb2xlLCBtZW51X2tleSwgdmlzaWJsZSkgVkFMVUVTICg/LD8sPyknLFxyXG4gICAgICAgICAgW3JvbGUsIG0sIHZtLmluY2x1ZGVzKG0pID8gMSA6IDBdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdCBwYWMgPSBkYXRhYmFzZS5leGVjKCdTRUxFQ1QgQ09VTlQoKikgRlJPTSBwYXJ0bmVycycpO1xyXG4gIGlmICgocGFjWzBdPy52YWx1ZXNbMF0/LlswXSB8fCAwKSA9PT0gMCkge1xyXG4gICAgY29uc3QgZGVmYXVsdFBhcnRuZXJzID0gW1xyXG4gICAgICBbJ+WBpeW4hueUn+eJqeenkeaKgOmbhuWbouiCoeS7veaciemZkOWFrOWPuCcsICflgaXluIbnlJ/niaknLCAnSmFmcm9uIEJpb21lZGljYWwgQ28uLCBMdGQuJywgJ2h0dHA6Ly93d3cuamFmcm9uLmNvbScsICcnLCAn54+g5rW35biC5ZSQ5a625rm+56eR5oqA5Yib5paw5rW35bK456eR5oqA5LiA6LevOeWPtycsICfooYDmtrLlh4DljJbkuqflk4HnmoTnoJTlj5HjgIHnlJ/kuqfkuI7plIDllK4nXSxcclxuICAgICAgWyflpKnlo6vlipvljLvoja/pm4blm6LogqHku73mnInpmZDlhazlj7gnLCAn5aSp5aOr5YqbJywgJ1Rhc2x5IFBoYXJtYWNldXRpY2FsIEdyb3VwIENvLiwgTHRkLicsICdodHRwOi8vd3d3LnRhc2x5LmNvbScsICcnLCAn5aSp5rSl5biC5YyX6L6w56eR5oqA5Zut5Yy656eR5oqA5Lic6LevMeWPtycsICfnjrDku6PkuK3oja/jgIHljJblraboja/jgIHnlJ/nianoja/nmoTnoJTlj5HjgIHnlJ/kuqfkuI7plIDllK4nXSxcclxuICAgICAgWyfpm4Xln7notLjmmJPvvIjkuIrmtbfvvInmnInpmZDlhazlj7gnLCAn6ZuF5Z+5JywgJ0FiYm90dCBMYWJvcmF0b3JpZXMgVHJhZGluZyAoU2hhbmdoYWkpIENvLiwgTHRkLicsICdodHRwOi8vd3d3LmFiYm90dC5jb20uY24nLCAnJywgJ+S4reWbve+8iOS4iua1t++8ieiHqueUsei0uOaYk+ivlemqjOWMuuWklumrmOahpeS/neeojuWMuuWvjOeJueWMl+i3rzM5OeWPtycsICfljLvnlpflgaXlurfjgIHor4rmlq3jgIHokKXlhbvlk4Hlj4rmiJDnhp/oja/lk4EnXSxcclxuICAgICAgWyfmiJDpg73ll5bll5bkvJjpgJ/nvZHnu5znp5HmioDmnInpmZDlhazlj7gnLCAn5ZeW5ZeW5LyY6YCfJywgJ0NoZW5nZHUgU291c291IFlvdXN1IE5ldHdvcmsgVGVjaG5vbG9neSBDby4sIEx0ZC4nLCAnaHR0cDovL3d3dy5zb3Vzb3V5b3VzdS5jb20nLCAnJywgJ+Wbm+W3neecgeaIkOmDveW4gumrmOaWsOWMuuWQieazsOS6lOi3rzg45Y+3JywgJ+S6kuiBlOe9keS/oeaBr+acjeWKoeS4jue9kee7nOaKgOacr+eglOWPkSddLFxyXG4gICAgICBbJ+aIkOmDveS4lue6quWfjuS8muWxlembhuWbouaciemZkOWFrOWPuCcsICfmiJDpg73kuJbnuqrln47kvJrlsZUnLCAnQ2hlbmdkdSBDZW50dXJ5IENpdHkgRXhoaWJpdGlvbiBHcm91cCBDby4sIEx0ZC4nLCAnaHR0cDovL3d3dy5jZW50dXJ5Y2l0eWV4aGliaXRpb24uY29tJywgJycsICflm5vlt53nnIHmiJDpg73luILpq5jmlrDljLrlpKnlupzlpKfpgZPkuK3mrrUxNzflj7cnLCAn5Lya5bGV5Zy66aaG6L+Q6JCl44CB5Lya6K6u5bGV6KeI562W5YiS5LiO5omn6KGMJ10sXHJcbiAgICAgIFsn5q2j5aSn5aSp5pm06I2v5Lia6ZuG5Zui6IKh5Lu95pyJ6ZmQ5YWs5Y+4JywgJ+ato+Wkp+WkqeaZtCcsICdDaGlhIFRhaS1UaWFucWluZyBQaGFybWFjZXV0aWNhbCBHcm91cCBDby4sIEx0ZC4nLCAnaHR0cDovL3d3dy5jdHRxLmNvbScsICcnLCAn5rGf6IuP55yB6L+e5LqR5riv5biC5paw5rWm5Yy65beo6b6Z5YyX6LevMTblj7cnLCAn5oqX6IK/55ik44CB6IKd55eF5Y+K5ZG85ZC457O757uf6I2v54mp56CU5Y+R5LiO55Sf5LqnJ10sXHJcbiAgICAgIFsn5Zu95a625Y2r55Sf5YGl5bq35aeU6IO95Yqb5bu66K6+5ZKM57un57ut5pWZ6IKy5Lit5b+DJywgJ+WNq+WBpeWnlOiDveW7uuS4reW/gycsICdOQ0NIRCwgTkhDJywgJ2h0dHA6Ly93d3cubmNjaGQub3JnLmNuJywgJycsICfljJfkuqzluILmtbfmt4DljLrlrabpmaLot68zOOWPtycsICfljavnlJ/lgaXlurfooYzkuJrkurrmiY3pmJ/kvI3og73lipvlu7rorr7kuI7nu6fnu63ljLvlrabmlZnogrInXSxcclxuICAgICAgWyfljZfkuqzmraPlpKflpKnmmbTliLboja/mnInpmZDlhazlj7gnLCAn5Y2X5Lqs5q2j5aSn5aSp5pm0JywgJ05hbmppbmcgQ2hpYSBUYWktVGlhbnFpbmcgUGhhcm1hY2V1dGljYWwgQ28uLCBMdGQuJywgJ2h0dHA6Ly93d3cubmpjdHRxLmNvbScsICcnLCAn5rGf6IuP55yB5Y2X5Lqs5biC57uP5rWO5oqA5pyv5byA5Y+R5Yy65oGS5bm/6LevMzblj7cnLCAn5b+D6ISR6KGA566h44CB5aSW56eR5Y+K5raI5YyW57O757uf6I2v54mp5Yi26YCgJ10sXHJcbiAgICAgIFsn6KW/5a6J55ub5Y2a5ZWG5Yqh5Lya5bGV5pyN5Yqh5pyJ6ZmQ5YWs5Y+4JywgJ+ilv+Wuieebm+WNmuS8muWxlScsICdYaVxcJ2FuIFNoZW5nYm8gQnVzaW5lc3MgRXhoaWJpdGlvbiBTZXJ2aWNlIENvLiwgTHRkLicsICdodHRwOi8vd3d3Lnhhc2hlbmdiby5jb20nLCAnJywgJ+mZleilv+ecgeilv+WuieW4gumbgeWhlOWMuuacsembgOWkp+ihl+WNl+autTLlj7cnLCAn5Lya6K6u5bGV6KeI5pyN5Yqh5LiO5YWs5YWz562W5YiS5Lia5YqhJ11cclxuICAgIF07XHJcbiAgICBmb3IgKGNvbnN0IHAgb2YgZGVmYXVsdFBhcnRuZXJzKSB7XHJcbiAgICAgIGRhdGFiYXNlLnJ1bignSU5TRVJUIElOVE8gcGFydG5lcnMgKG5hbWUsIHNob3J0X25hbWUsIGVuZ2xpc2hfbmFtZSwgd2Vic2l0ZSwgbG9nbywgYWRkcmVzcywgZGVzY3JpcHRpb24pIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyknLCBwKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbImluaXRTcWxKcyIsInBhdGgiLCJmcyIsImJjcnlwdCIsIkRCX1BBVEgiLCJqb2luIiwicHJvY2VzcyIsImN3ZCIsImRiIiwiU1FMIiwiaW5pdFByb21pc2UiLCJ0cmFuc2FjdGlvbkRlcHRoIiwic2F2ZURiIiwiZGF0YSIsImV4cG9ydCIsImJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJkaXIiLCJkaXJuYW1lIiwiZXhpc3RzU3luYyIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJlbnN1cmVJbml0IiwiZmlsZUJ1ZmZlciIsInJlYWRGaWxlU3luYyIsIkRhdGFiYXNlIiwiaW5pdGlhbGl6ZURhdGFiYXNlIiwiZ2V0RGIiLCJwcmVwYXJlIiwic3FsIiwiZ2V0IiwicGFyYW1zIiwic3RtdCIsImxlbmd0aCIsImJpbmQiLCJzdGVwIiwicmVzdWx0IiwiZ2V0QXNPYmplY3QiLCJmcmVlIiwidW5kZWZpbmVkIiwiYWxsIiwicmVzdWx0cyIsInB1c2giLCJydW4iLCJsYXN0SWQiLCJleGVjIiwiY2hhbmdlcyIsImdldFJvd3NNb2RpZmllZCIsImxhc3RJbnNlcnRSb3dpZCIsInZhbHVlcyIsInRyYW5zYWN0aW9uIiwiZm4iLCJhcmdzIiwiZXJyb3IiLCJjb25zb2xlIiwicm9sbGJhY2tFcnJvciIsImRhdGFiYXNlIiwiaW5pdERlZmF1bHREYXRhIiwiZGMiLCJuIiwidWMiLCJzIiwiZ2VuU2FsdFN5bmMiLCJ1c2VycyIsImhhc2hTeW5jIiwidSIsImNjIiwicGMiLCJtZW51cyIsInJvbGVzIiwiYWRtaW4iLCJlbXBsb3llZSIsInN1cGVydmlzb3IiLCJmaW5hbmNlIiwic2VjcmV0YXJ5Iiwicm9sZSIsInZtIiwiT2JqZWN0IiwiZW50cmllcyIsIm0iLCJpbmNsdWRlcyIsInBhYyIsImRlZmF1bHRQYXJ0bmVycyIsInAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./src/lib/db.js\n");
|
||
|
||
/***/ })
|
||
|
||
};
|
||
;
|
||
|
||
// load runtime
|
||
var __webpack_require__ = require("../../../webpack-runtime.js");
|
||
__webpack_require__.C(exports);
|
||
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
||
var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/semver","vendor-chunks/bcryptjs","vendor-chunks/jsonwebtoken","vendor-chunks/lodash.includes","vendor-chunks/jws","vendor-chunks/lodash.once","vendor-chunks/jwa","vendor-chunks/lodash.isinteger","vendor-chunks/ecdsa-sig-formatter","vendor-chunks/lodash.isplainobject","vendor-chunks/ms","vendor-chunks/lodash.isstring","vendor-chunks/lodash.isnumber","vendor-chunks/lodash.isboolean","vendor-chunks/safe-buffer","vendor-chunks/buffer-equal-constant-time"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fcontracts%2Froute&page=%2Fapi%2Fcontracts%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fcontracts%2Froute.js&appDir=D%3A%5Chaomi%5Ccodex_projects%5CcontractApproval%5Csrc%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=D%3A%5Chaomi%5Ccodex_projects%5CcontractApproval&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!")));
|
||
module.exports = __webpack_exports__;
|
||
|
||
})(); |